我有一个异步运行Task
,它在完成时触发一个事件,如下所示:
task.ContinueWith(() => {
if (MyEvent != null)
MyEvent(this, EventArgs.Empty);
}
然后,事件处理程序应创建 WPF 控件的实例。但是当我尝试这样做时,它会导致异常:The calling thread must be STA, because many UI components require this
. 调用方法时,类构造函数中发生异常InitializeComponent()
。
据我所知,通常从单独的线程访问 WPF 控件是使用 处理的Dispatcher.Invoke
,它总是对我有用,所以我试了一下:
Dispatcher.Invoke(new Action(() =>
{
InitializeComponent();
}));
但在那种情况下,异常不断发生。如何从单独的线程创建 WPF 控件的实例?
或者,将完成事件编组到主 UI 线程可能是一种更好的方法。如果是,我该怎么做?