问题:应该" Application.Current.Dispatcher.Invoke"是在工作线程中引发事件还是在处理事件的UI代码中?它可以正常工作,但更好的做法或差异是什么?
在创建新闻自动收报机的WPF应用程序中,我通过Microsoft.Office.Interop.Outlook
和ItemAdd
事件从新的收件箱电子邮件中检索正文文本,然后引发传递正文文本的事件。主视图模型按如下方式订阅此事件。在OutlookReader
班级:
private void OnEmailFoundWithSubjectMatchingFilter(_MailItem item)
{
System.Windows.Application.Current.Dispatcher.Invoke(() =>
{
FoundEmailWithSubjectMatchingFilter?.Invoke(this, item.Body);
});
}
而且,在MainViewModel
课程中:
private void HandleEmailFeed(object sender, string e)
{
//Application.Current.Dispatcher.Invoke(() =>
//{
var parser = new MailBodyParser();
AddFeedItem(parser.Parse(e));
//});
}
答案 0 :(得分:0)
应该将“Application.Current.Dispatcher.Invoke”放入工作线程引发事件还是处理事件的UI代码中?
后者我会说。主要是因为工作线程可以在不知道任何System.Windows.Application
对象的类库中启动。
因此工作线程应该简单地引发事件,然后客户端应用程序只负责更新最初创建它们的调度程序线程上的UI元素。类库不应该关心甚至不了解任何调度程序。