我得到一个例外,我不知道为什么我会得到这个。
我想用SQL中的数据更新DataGrid
。
问题似乎与我的ObservableCollection
..
以下是代码:
private void Refresh()
{
new Thread(() =>
{
List<DatabaseEntry> entries = GetBrokenJobs();
Dispatcher.CurrentDispatcher.Invoke(() =>
{
UpdateUi(entries);
});
}).Start();
}
private void UpdateUi(List<DatabaseEntry> entries)
{
Jobs.Clear();//<== !!! Exception origin !!!
foreach (var jobName in entries.SelectMany(x => x.JobBezeichnung as string).ToList())
{
Jobs.Add(jobName.ToString());
}
}
异常是说我无法修改&#34; SourceCollection&#34;当我不在Dispatcher-Thread上时......
但是我在Dispatcher上调用调用方法?!
我在这里缺少什么?故障在哪里?
答案 0 :(得分:1)
你可以在这样的UI线程上运行
Application.Current.Dispatcher.Invoke(() =>
{
UpdateUi(entries);
});
答案 1 :(得分:0)
我通过在ViewModel中创建一个静态变量来修复它:
public static Dispatcher UI_Dispatcher { get; set; }
然后在我的ViewModel中:
public MainViewModel(Main window)
{
UI_Dispatcher = Dispatcher.CurrentDispatcher; //Since we are on the UI-Thread when passing this piece of code this is the right Dispatcher
}
后来我刚刚在UI_Dispatcher.Invoke()
上调用。