Dispatch.BeginInvoke我做错了什么?

时间:2012-05-24 07:57:14

标签: c# wpf asynchronous delegates dispatcher

我有一个包含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中的代码。

我做错了什么?

1 个答案:

答案 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);
    });
}