Dispatcher in WPF に関する記事を読んだことがありますが、Dispatcher の動作を非常によく説明しているものはありませんでした。皆さんへの私の質問は、タスクのキューを保持し、優先順位に従ってそれらを実行する以外に、Dispatcher が正確に何をするかということです。キューはどのように見えますか? 優先度「通常」で3つのタスクを順番に配置し、次に優先度「送信」で1つのタスクを配置するとします。どちらが最初に実行されますか? 優先度が通常の 3 つのタスクはどのような順序で実行されますか? Dispatcher に関する本当に優れたチュートリアルや、共有したい概念の証明はありますか?
1 に答える
これDispatcher
は事実上、WPF アプリケーションの単なるメッセージ ポンプです。
従来の Windows メッセージ ポンプとは異なり、優先順位が組み込まれているため、従来の (先入れ先出し) キューではなく優先キューのように機能します。
の優先度を持つメッセージをディスパッチするとSend
、 などの他の優先度を持つ他の操作の前に処理されNormal
ます。優先度のリストとその値は、DispatcherPriority
ヘルプで確認できます。優先度の高いメッセージは常に、優先度の低いメッセージ (まだ処理されていない) の前に処理されます。
具体的な質問について:
皆さんへの私の質問は、タスクのキューを保持し、優先順位に従ってそれらを実行する以外に、Dispatcher が正確に何をするかということです。
従来の Win32 または Windows フォーム アプリケーションの通常の Windows メッセージ ポンプと同様に、Windows メッセージを処理します。優先順位付けされたキューは、標準の Windows メッセージに加えてユーザー メッセージを処理するために構築され、優先度が組み込まれています。
キューはどのように見えますか?
これは実質的に優先キューです。
優先度「通常」で3つのタスクを順番に配置し、次に優先度「送信」で1つのタスクを配置するとします。どちらが最初に実行されますか?
場合によります。その時点で他の作業が発生している場合は、そのSend
タスクが最初に処理されます。他の作業が発生していない場合は、タスクNormal
を送信する前にタスクが実行される可能性がありSend
、その場合、順序が変更されます。ただし、Send
タスクはできるだけ早く実行されます。
優先度が通常の 3 つのタスクはどのような順序で実行されますか?
これらは、ディスパッチされたのと同じ順序で実行されます。