我有一些代碼,其執行窗口SVC(另一種方法),並更新在同一時間的UI。該呼叫使用BeginInvoke
,就像這樣:的BackgroundWorker/Control.BeginInvoke()冷凍UI
Install.BeginInvoke((MethodInvoker) delegate { Install.Enabled = false; });
這是DoWork
事件處理程序。但是,用戶界面仍然凍結。我需要撥打Application.DoEvents
某處(如果有,請在哪裏?)?我怎樣才能消除凍結?
在按鈕的點擊,我有:
GetPrinterDto(DirectoriesTreeView.SelectedNode.Text);
InstallBackgoundWorker.RunWorkerAsync();
InstallBackgroundWorker
只是運行它更新UI代碼等
我所試圖做的是調用WCF服務器(在Windows託管服務 - 這很好),但是當它沒有做它的事情時,用異步方式更新進度條和任意值的標籤。當我選擇一個treenode時,會發生選定treenode的事件處理程序,這可能會導致一些減速。我會嘗試把它放在自己的背景工作者中。
你可以發佈一些更多的代碼?有些東西阻礙了你的用戶界面,並且從上面來看,這是無法診斷的。 – 2011-05-09 16:36:43
UI線程當時在做什麼?什麼是「安裝」?它*看起來像*它應該沒問題... – 2011-05-09 16:38:35
安裝是一個按鈕。 – blade33 2011-05-09 16:49:56