私はすべてのデータのためのTCP接続を監視し、メッセージ全体を受け取ってきたイベントを起動し、プログラムを持っています。リスナーは、UIスレッドとは別のスレッドにあります。イベントが発生すると、メッセージにUIの変更が必要な場合は、現在の変更を含むフォームを呼び出します。この呼び出しにヒットした場合、Eventからトリガーされたリスナーの関数は、クロススレッド操作に無効なエラーを出します。私は呼び出すことによってそのエラーを回避しようとしているときに、イベントを呼び出したスレッドがそのエラーを表示する理由を理解できません。例:コマンドの起動なしクロススレッド動作の「滝戻る」
:
if (cmd == "NEWID")
{
usr = new User(usr.Name, int.Parse(NW_Connector.GetWord(msg, 1)));
this.Text = "Note It - " + usr.Name + "(" + usr.ID + ")"; //Cross-Thread Here
}
クロススレッドがthis.Text変化にフラグを立てています。
私が起動追加:
if (cmd == "NEWID")
{
usr = new User(usr.Name, int.Parse(NW_Connector.GetWord(msg, 1)));
this.Invoke(new MethodInvoker(delegate { this.Text = "Note It - " + usr.Name + "(" + usr.ID + ")"; }));
}
クロススレッドがイベントを発射した関数にフラグを立てている:
:if (NewMessage != null && NetworkConnectionState != ConnectionState.Closing)
NewMessage(this, cl, data); //Cross-Thread Here
NewMessage機能が登録されているイベントです
public delegate void RecievedMessage(object sender, Client messageSender, byte[] message);
public event RecievedMessage NewMessage;
正しいスレッドを呼び出すときにクロススレッドが「移動」された理由を理解できません。ひどい。どんな助けも素晴らしいだろう!
'NewMessage'機能は何をしますか?どんな風に見えますか? –
NewMessageは、に登録されているイベントです。その情報でオリジナルの投稿を編集しました。 – Skintkingle