ホームページ > バックエンド開発 > C++ > 別のバックグラウンド スレッドから WPF UI を安全に更新するにはどうすればよいですか?

別のバックグラウンド スレッドから WPF UI を安全に更新するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2025-01-06 02:51:40
オリジナル
722 人が閲覧しました

How to Safely Update a WPF UI from a Separate Background Thread?

別のクラスで実行されている別のスレッドから UI を更新する方法

問題ステートメント:

マルチスレッド WPF の場合アプリケーションでは、別のクラスで実行されているバックグラウンド スレッドから UI を更新する必要があります。目標は、長時間の計算が実行されている間、UI の応答性を維持することです。

イベント ディスパッチを使用した解決策:

  1. バックグラウンド スレッドからのディスパッチ: バックグラウンド スレッド内で、Dispatcher.Invoke を使用して UI スレッドでデリゲートを実行します。このアプローチにより、他のスレッドから直接 UI 更新を行うことができます。
  2. UI クラスのディスパッチを処理する: UI 更新リクエストを受信するイベント ハンドラーを UI クラスに登録します。イベント ハンドラーで、Invoke アクションを使用して UI を更新します。

コード例:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void startCalc(object sender, RoutedEventArgs e)
    {
        inputValues input = new inputValues();

        calcClass calculations = new calcClass();

        try
        {
            // Parse user inputs
        }
        catch
        {
            // Handle input errors
        }

        // Register event handler
        calculations.ProgressUpdate += OnProgressUpdate;

        // Start background calculations
        Thread calcthread = new Thread(
            new ParameterizedThreadStart(calculations.testMethod));
        calcthread.Start(input);
    }

    private void OnProgressUpdate(object sender, YourEventArgs args)
    {
        Dispatcher.Invoke((Action)delegate()
        {
            // Update UI based on event arguments
        });
    }
}

public class calcClass
{
    public event EventHandler<YourEventArgs> ProgressUpdate;

    public void testmethod(inputValues input)
    {
        for (int i = 0; i < 1000; i++)
        {
            // Perform calculations

            // Raise ProgressUpdate event when needed
            if (ProgressUpdate != null)
                ProgressUpdate(this, new YourEventArgs(status));

            Thread.Sleep(10);
        }
    }
}
ログイン後にコピー

イベント ディスパッチの利点:

  • 実装が簡単
  • 可能UI の更新を正確に制御
  • UI コードと非 UI コードを明確に分離します

以上が別のバックグラウンド スレッドから WPF UI を安全に更新するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート