0

TCP/IP サーバーとクライアントを実行する C# WinForm があります。ボタンをクリックすると、メッセージを送信するために TCP クライアントがインスタンス化され、その後閉じられます。サーバーはメッセージをキャプチャし、メッセージ ボックスに表示します。

質問:
WinForm が中断されたようです。クリックに常に応答するとは限りません (これにより、クライアント メッセージの送信メソッドがインスタンス化されます)。これはサーバースレッドが原因だと思いますか?もしそうなら、この中断を修正するにはどうすればよいですか。

4

1 に答える 1

1

UI スレッドでネットワークが発生しているようです。これは大きな問題です。UI スレッドは、ユーザー イベントに応答できるようにしておく必要があります。

ネットワークを別のスレッドに配置するか、非同期 API を使用する必要があります。ただし、UI スレッドからのみ UI を更新できることを忘れないでください。したがって、通常はBackgroundWorker、UI スレッドで進行状況/完了を報告するために使用するか、UI スレッドでデリゲートを実行するためにControl.Invoke/を使用します。Control.BeginInvokeスレッド化については、さまざまな本やチュートリアルで読むことができます。私はJoe Albahari のチュートリアルが好きです。

.NET 4.5 / C# 5 を使用している場合は、非同期呼び出しを使用して作業を大幅に簡素化できますが、以前のバージョンの .NET を使用している場合は、別のスレッドを使用する方がおそらく簡単です。

于 2013-02-11T15:30:44.137 に答える