我有两个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