0

単純なwpfアプリケーションを構築しています。GUIにはボタンがあり、押すとバック​​グラウンドスレッドが作成されます。WebSocketサーバーはこのバックグラウンドスレッドで実行されます。WebSocketサーバーはイベント駆動型です。このサーバーではアクティビティが少ない期間があるかもしれませんが、ボリュームが少ないためにスレッドを終了したくありません。このスレッドを永続化する簡単な方法はありますか(少なくともアプリが終了するまで)?

4

1 に答える 1

1

ボリュームが少ないためにスレッドが終了するのはなぜですか?スレッドは、指示した場合にのみ終了します。アプリケーションとフォームが閉じていても、バックグラウンドスレッドは実行される可能性があります。

スレッド内のTCPServerクラス(TCPListenerを使用)に似たものがあります。バックグラウンドスレッドはAcceptTcpClient()(ブロックしていて無限ループ)でブロックできるため、TCPListenerを手動で閉じる必要があります。

public partial class MainForm : Form
{
    public TCPServer TCPServer = new TCPServer();
    private Thread ServerThread = null;

    private void button1_Click(object sender, EventArgs e)
    {
        ServerThread = new Thread(TCPServer.Run);
        ServerThread.Start();
    }

    private void OnApplicationExit(object sender, EventArgs e)
    {
        if (TCPServer.Server != null)
            TCPServer.Server.Stop();
     }
}
于 2012-09-06T02:57:34.143 に答える