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

このメソッドは、timer_Tick イベント ハンドラーから 10 秒ごとに呼び出されます。次に、データが非同期でクエリされ、コールバックが実行されます。クエリされたデータは、Observable Collection に挿入する必要があります (STA スレッドではなく、呼び出しを開始します)。コールバックには正しく入りますが、Dispatcher.CurrentDispatcher.BeginInvoke 内のコードは実行されません。

私は何を間違っていますか?

4

1 に答える 1

1

Dispatcher.CurrentDispatcher別のスレッドで実行されているメソッド内で呼び出しているため、これは機能しません。これはDispatcherあなたが探しているものではありません。

代わりに、Dispatcherメソッドを呼び出す前にローカル変数を現在の値に設定する必要があります。そうすれば、ラムダにリフトされます。

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 に答える