0

TCPサーバーアプリがあり、TCPクライアントと通信するためのスレッドがあります。クライアントからデータを受け取ったら、このデータを使用して新しいフォームを作成したいのですが、スレッドでフォームを作成できません。ボタンクリックイベントを使用してフォームを簡単に作成できます。

私はどこが間違っていますか?

ありがとうございました。

4

3 に答える 3

3

このような状況を回避するには、アプリケーションの元のUIスレッドに新しいフォームの作成を処理させ、複数のUIスレッドを持たないようにすることをお勧めします。幸い、そのスレッドで操作を呼び出すことができます。

WinFormsで実行する方法については、こちらを参照してください。WPF / Silverlightで実行するには、こちらを参照してください。

于 2012-04-30T08:28:45.003 に答える
1

仕事をするためのサンプルコード:

  private void Button1_Click(object sender, EventArgs e)
{
    Thread t1 = new Thread(StartMe);
    t1.Name = "Custom Thread";
    t1.IsBackground = true;
    t1.Start();
}

private void StartMe()
{
    //We are switching to main UI thread.
    TextBox1.Invoke(new InvokeDelegate(InvokeMethod), null); 
}

public void InvokeMethod()
{
    //This function will be on main thread if called by Control.Invoke/Control.BeginInvoke
    MyForm frm = new MyForm();
    frm.Show();
}
于 2012-04-30T08:40:44.473 に答える
0

新しいフォームを作成するには、どこかでコンテキストをGUIスレッドに変更する必要があります。どこかで、BeginInvoke()を実行する必要があります。

これはどのような種類のサーバーですか?クライアント接続ごとに1つのリスニングスレッドとserver <>クライアントスレッドがある「クラシック」同期サーバーですか?

クライアント接続時にフォームを作成するのではなく、接続されたクライアントが具体的に尋ねた場合にのみこのフォームを作成します。

于 2012-04-30T08:35:28.080 に答える