2017-10-01 5 views
0

LAN(Local Area Network)でアプリケーションクライアント - サーバーチャットを作成します。 コンソールc#でエラーなしで完全な状態を実証します。しかし、私がWindow Form(C#)を使用すると、サーバー側で次のように表示されます。Socket.Accept()がWindowフォームCで動作していません。

Socket client = newsock.Accept(); 

と表示されず、ウィンドウフォームが表示されます。

どうすれば修正できますか?みんなありがとう!

+0

もっと詳しくはこちら – Mostafiz

+0

@Mostafiz:問題はクリスタルクリアです。 「Accept()」はリクエストを待っているため、そのリクエストが受信されるまでプログラムはフリーズします。 – Transcendent

答えて

0

これは、実際にリクエストを待っているため、リクエストの受信まではUIコンポーネントの初期化メソッドであるコードの次の行には到達していないためです。これをスレッドに移動し、それをloadイベントに割り当てます。例:

public MyForm(){ 
    InitializeComponent(); 
    this.Loaded += OnWindowLoaded; 
} 
private async void OnWindowLoaded(object sender, EventArgs e) 
{ 
    await Task.Run(() => { 
     while (runState) { 
      Socket client = newsock.Accept(); 
      // Then do the rest 
     } 
    }); 
} 
関連する問題