ui更新の「クロススレッド操作ではない」例外
エラー「呼び出しスレッドは、異なるスレッドが所有するため、このオブジェクトにアクセスできません」というのは、通常、バックグラウンドスレッドからUI要素を変更しようとするときに発生します。 これは、UI要素がメインスレッドによって所有されているためです。コードの問題のある行は次のとおりです
このコードは、メインスレッド以外のスレッドからUI(たとえば、テキストボックスの更新)と対話する可能性が高い<code class="language-csharp">objUDMCountryStandards.Country = txtSearchCountry.Text.Trim() != string.Empty ? txtSearchCountry.Text : null;</code>
objUDMCountryStandards.Country
メソッド1:
このメソッドは、デリゲート内のコードがメインスレッドで実行されることを保証します。
Dispatcher.Invoke
Invoke
<code class="language-csharp">this.Dispatcher.Invoke(() => { objUDMCountryStandards.Country = txtSearchCountry.Text.Trim() != string.Empty ? txtSearchCountry.Text : null; });</code>
が使用されています:
Dispatcher.CheckAccess
これらのメソッドのいずれかを実装することにより、メインスレッドでUIの更新が実行され、「クロススレッド操作」の例外が防止され、UIの応答性が維持されることを保証します。
などのプレースホルダーを実際の変数名に置き換えることを忘れないでください。
以上が「異なるスレッドが所有しているため、「呼び出しスレッドはこのオブジェクトにアクセスできません」とWPFのエラーを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。