2

私はWPFに比較的慣れていません。私は次のようなコードを調べています:

private void button_Click(object sender, RoutedEventArgs e)
{
    //Queue on dispatcher in the background so it doesn't make the UI slow
        Dispatcher.BeginInvoke(new dMyDelegate(PerformOperation), DispatcherPriority.Background);
}

コメントから、元のコードはUIの応答性を高めるためにこれが必要であると感じたと思いますが、私の理解では、Dispatcher.BeginInvokeはUIスレッドで何かを実行するだけです。buttn_ClickはすでにUIスレッド上にあるので、ポイントは何ですか?おそらく、私はDispatcherとBeginInvokeを誤解しています。この場合のDispatcherは、このメソッドが含まれるクラスであるMainWindow.xamlが所有するディスパッチャーであると想定しています。誰かが私を啓発できますか?

ありがとう

4

1 に答える 1

5

「バックグラウンド」の優先順位を要求しているので、より重要なイベントが処理されたときにのみ実行されます...これが大画面の更新の一部である場合は、すべてが発生するまで効果的に待機します。実行中。それでも、長時間実行される(またはブロックする可能性のある呼び出しを行う)場合は、その通りです。実際には、UIスレッドで実行するべきではありません。

于 2010-09-17T16:14:01.993 に答える