私は小さなチャットアプリを書いていて、このイベントハンドラーがあります:
void o_Typing(object sender, EventArgs e)
{
MessageBox.Show("Fired!");
this.Text = "Fired!";
}
o_Typing
から派生したクラスのメソッドTabPage
です。基本的に、各会話には独自のタブが必要です。
イベント ハンドラーは、別のスレッドで実行されている Chat オブジェクトによって起動されます。UI 用に 1 つのスレッドがあり、チャットの会話ごとに別のスレッドがあります (新しいデータについてサーバーをポーリングし続けるため)。
イベントが発生すると、MessageBox
ポップアップが表示されますが、タブのキャプションは変更されません。イベントが一度発生すると、二度と発生しないため、UI スレッドで定義されているにもかかわらず、イベントがワーカー スレッドで呼び出されていると思われます。
Invoke()
イベントをワーカー スレッドから呼び出して、UI スレッドで実行するために使用するにはどうすればよいですか?