我有兩個UI線程,一個是主線程,另一個是後臺線程,其ApartmentState是STA。每個線程創建自己的窗口,並且背景窗口上有一個「取消」按鈕。WPF中的多線程UI
主線程有一個繁忙的功能,需要很長時間才能完成。我希望一旦點擊「取消」按鈕,主線程應該停止耗時的功能。
下面是僞代碼在主線程:
的(...) {
//Option A: Application.DoEvents(); //Option B: Dispatcher.Invoke to update UI in background thread if(cancel) return; //Stop the time-consuming function else DoSomething;
}
奇怪的是,點擊事件「取消」按鈕不被後臺線程捕獲或處理。國際海事組織,每個線程都有自己的消息隊列,當我點擊「取消」按鈕時,這個消息應該排隊和後臺線程立即處理,但根據我的測試本地,這是不正確的,後臺線程永遠不會處理按鈕點擊事件...
有什麼想法?
順便說一句,我認爲有兩種方法可以解決上述問題,一種是使用Application.DoEvents,另一種是利用Dispatcher.Invoke。但我仍然很好奇爲什麼後臺線程無法立即處理消息。提前致謝。
'Application.DoEvents'在WPF中不存在...你是如何實現它的? – 2013-05-02 15:48:24
做。事件。 lawd。 – Will 2013-05-02 15:56:09