我有一个包含QueryData方法的ViewModel:
void QueryData() {
_dataService.GetData((item, error) =>
{
if(error != null)
return;
Dispatcher.CurrentDispatcher.BeginInvoke(new Action(() =>
{
foreach(TimeData d in ((LineDetailData)item).Piecesproduced) {
Produced.Add(d);
}
}), DispatcherPriority.Send);
});
}
此方法每10秒从timer_Tick事件处理程序调用一次。然后查询数据异步,然后执行回调。那里查询的数据应该插入一个Observable Collection(不是STA Thread - > begin Invoke)。它正确输入回调,但不执行Dispatcher.CurrentDispatcher.BeginInvoke中的代码。
我做错了什么?
答案 0 :(得分:1)
这不起作用,因为您在另一个线程上运行的方法中调用Dispatcher.CurrentDispatcher
。这不是您要找的Dispatcher
。
相反,您应该在调用方法之前将局部变量设置为当前Dispatcher
,然后它将被提升到您的lambda中:
void QueryData()
{
var dispatcher = Dispatcher.CurrentDispatcher;
_dataService.GetData((item, error) =>
{
if(error != null)
return;
dispatcher.BeginInvoke(new Action(() =>
{
foreach(TimeData d in ((LineDetailData)item).Piecesproduced) {
Produced.Add(d);
}
}), DispatcherPriority.Send);
});
}