很多时候,由于后台线程需要直接控制相关主线程的工作。
如果直接使用则会出现如下类似的异常:
System.NotSupportedException:“该类型的 CollectionView 不支持从调度程序线程以外的线程对其 SourceCollection 进行的更改。”
方法一
在窗体初始化的时候加入:
public MainWindow()
{
DispatcherHelper.Initialize();
InitializeComponent();
}
后台代码:
Task.Run(() => DispatcherHelper.CheckBeginInvokeOnUI(() =>
{
// do something
}));
方法二
这个方法没有仔细研究过,不过是可以用的:
ThreadPool.QueueUserWorkItem(delegate
{
System.Threading.SynchronizationContext.SetSynchronizationContext(new System.Windows.Threading.DispatcherSynchronizationContext(System.Windows.Application.Current.Dispatcher));
System.Threading.SynchronizationContext.Current.Post(pl =>
{
// do something
}, null);
});