1

Dispatcher.BeginInvoke に関する質問

次のような方法がある場合:

private void DoSomeWork()
{
   MyCanvas.Dispatcher.BeginInvoke(DispatcherPriority.Background, new DispatcherOperationCallback(delegate
        {
            //Do something

            return null;

        }), null);
    }

そして、メソッドを複数回呼び出すと、ドキュメントに従って作成された順序で複数の呼び出しが実行されます。同じ DispatcherPriority で複数の BeginInvoke 呼び出しが行われた場合、それらは呼び出しが行われた順序で実行されます。 Dispatcher.BeginInvoke メソッド MSDN

これをクリアして、別の呼び出しが行われるのを停止したり、キューを単一の呼び出しにリセットしたりするにはどうすればよいでしょうか?

4

2 に答える 2

1

あなたが提供したMSDNリンクは、もう少し掘り下げて答えを与えました.

この操作は、キャンセルに使用できるDispatcherOperationオブジェクトを返します。ただし、キュー全体を制御することはできないため、これは呼び出しごとに行われます。

于 2012-11-27T18:41:51.197 に答える
1

これをクリアして、別の呼び出しが行われるのを停止したり、キューを単一の呼び出しにリセットしたりするにはどうすればよいでしょうか?

あなたはそうしない。ディスパッチャ キューを制御することはできません。あなたができることは、「保留中のリクエスト」の数を保持し(もちろん、アトミックに更新することを確認してください)、これがキュー内の最後の呼び出しである場合にのみ実行します(つまり、カウントを減らすと0になる場合)。

別のオプションは、最後の呼び出しが行われたときに何らかのタイマーを保持し、一定期間内にそれ以上の呼び出しを無視することです。

達成しようとしていることについて詳細を教えていただければ、より具体的なサポートを提供できます。

于 2012-11-27T18:40:35.963 に答える