WPF中非UI线程修改UI元素

1、问题的由来
需要设计一个类库, 将本地的log文件实时读取到一个对象中,则其他人就可以实时获取到本地的log信息,该类库被封装为一个类库,其中有个事件,使用者需要向为该事件提供Event Handler的方法,如果这个方法需要修改UI的元素,name就不能用不同的方法调用了:如:
LogMonitor.Initialize(“filename”);
LogMonitor.LatestLogsArrived += ShowLocalLogs;
LogMonitor.StartMonitoring(false);//类库中独立的一个线程
其中:
void ShowLocalLogs(List lgFlds)
{
foreach (var lg in lgFlds)
{
LocalLogsInfo.Add(lg._completeLog);
//LocalLogsInfo为 ObservableCollection类型的对象
}
}
如果这么调用的话就会出现如下信息:
This type of CollectionView does not support changes to its SourceCollection from a thread different from the Dispatcher thread
需要将上面的方法改为:
void ShowLocalLogs(List lgFlds)
{
foreach (var lg in lgFlds)
{
App.Current.Dispatcher.Invoke((Action)delegate
{
LocalLogsInfo.Add(lg._completeLog);
});
}
}

你可能感兴趣的:(C#,WPF(MVVM))