1

あいさつ、プログラミングは初めてです。

現在、私のアプリケーションはデリゲートを使用して、別のクラス/オブジェクトに存在するメソッドを処理/実行しています。

しかし、私は彼らが別々のスレッドに住んでいるというエラーを受け取っていました。だからウェブを検索した後、私はこれを思いついた:

this.Invoke(new Action(delegate() { this.ChatRichTextBox.AppendText(EventArgs.commMessage); }));

これはうまく機能しました。何が起こっているのかわかりません。コードを貼り付けたところ、機能しました。

現時点では、コンパイラがこのアクション内で> <!=操作を実行できないと言っているため、これを別の方法で実行する必要があります。

これを実装するための最良の方法についてアドバイスしてください。

どうもありがとうございます。

4

1 に答える 1

4

Windowsフォームコントロールへのアクセスは、本質的にスレッドセーフではありません。コントロールの状態を操作するスレッドが2つ以上ある場合は、コントロールを強制的に不整合な状態にすることができます。競合状態やデッドロックなど、その他のスレッド関連のバグが発生する可能性があります。コントロールへのアクセスがスレッドセーフな方法で実行されていることを確認することが重要です。

Invokeメソッドを使用せずに、コントロールを作成したスレッド以外のスレッドからコントロールを呼び出すことは安全ではありません。

于 2010-01-22T17:33:54.480 に答える