0

我有一个包含 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 事件处理程序中调用一次。然后异步查询数据,然后执行回调。在那里,查询的数据应该被插入到一个可观察的集合中(不是 STA 线程 -> 开始调用)。它正确地进入了回调,但是 Dispatcher.CurrentDispatcher.BeginInvoke 里面的代码没有被执行。

我究竟做错了什么?

4

1 回答 1

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);
    });
}
于 2013-06-27T20:24:51.707 回答