2010-03-08 103 views
0

我正嘗試創建一個狀態窗口,其內容(文本框)應該在漫長的操作中更改。 從主應用程序調用並更新此狀態窗口。 不幸的是,內容僅在操作結束時更新。 我正在使用VS2008,C#和WPF。wpf c#狀態窗口更新

謝謝。

+0

你的問題到底是什麼? – 2010-03-08 08:50:56

回答

3

這是另一種答案,以便更好地格式化:

代碼應該喜歡漂亮的多是這樣的:

BackgroundWorker bgWorker = new BackgroundWorker(); 

bgWorker.DoWork += new DoWorkEventHandler(bgWorker_DoWork); 

bgWorker.RunWorkerCompleted += new 
    RunWorkerCompletedEventHandler(bgWorker_RunWorkerCompleted); 

bgWorker.RunWorkerAsync(); 

bgWorker_DoWork方法,稱之爲「Dispatcher.Invoke」(或「Dispatcher.BeginInvoke」,取決於在情況下),並且調用委託可能會更新您的文本框(因爲它與文本框位於同一線程中)。

+0

BackgroundWorker已經支持進度更新(通過BackgroundWorker.ProgressChanged)。爲什麼要用Dispatcher Invoke/BeginInvoke添加另一個間接級別? – micahtan 2010-03-10 01:01:51

1

如果您正在調用一項服務並且該調用是同步的,那麼主應用程序將無法更新。你需要把它們放在不同的線程上。另外,如果服務調用獲得更高的優先級(UI線程總是優先級較低),則需要強制指示系統更新這些優先級。

1

如何通過使用Dispatcher在BackgroundWorker線程中執行冗長的操作並每隔一段時間通知內容?它會給你的用戶界面帶來一種反應迅速的進步感覺。

+0

你能舉個例子說明如何做到這一點? – phm 2010-03-08 08:53:06