無効なクロススレッド操作
エラー メッセージ「無効なクロススレッド操作」は、コントロールを作成したスレッド以外のスレッドからコントロールがアクセスされていることを示します。これは、コントロールを所有するスレッド以外のスレッドで UI 操作が実行された場合に発生します。
解決策
この問題を解決するには、2 つのオプションがあります:
1. UI スレッド
でメソッドを呼び出します。子スレッドでプロジェクトを作成し、Control.Invoke() を呼び出して、所有スレッドで UI 操作を実行します。
<code class="language-csharp">System.Threading.Thread t = new System.Threading.Thread(() => { // 执行耗时操作 var items = CreateItems(); Invoke(new Action(() => { // 在 UI 线程上将项目添加到 ListView listView1.Items.AddRange(items); // 执行其他与 UI 相关的任务 })); });</code>
2.BackgroundWorker を使用する
または、内部でスレッドを処理する BackgroundWorker を使用することもできます。
<code class="language-csharp">BackgroundWorker bw = new BackgroundWorker(); bw.DoWork += (s, e) => { /* 创建项目 */ }; bw.RunWorkerCompleted += (s, e) => { /* 将项目绑定到 UI 元素 */ }; bw.RunWorkerAsync();</code>
は、所有スレッド以外のスレッドで UI 操作を 実行できないことに注意してください。したがって、必ずこれらの方法のいずれかを使用して、UI の応答性と同期を確保してください。
以上がアプリケーションの「クロススレッド操作が無効です」エラーを解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。