0

サーバーを起動する次の方法があります。

    public void EngageServer()
    {
        this.tcpListener = new TcpListener(IPAddress.Any, _InternalPort);
        this.listenThread = new Thread(RunServer);
        this.listenThread.Start();

        Thread t = new Thread(new ParameterizedThreadStart(CheckPortStatus));
        t.Start(_ExternalPort);
    }

t問題は、作業が終了した後でもスレッドが実行され続けることです。方法は次のとおりです。

private void CheckPortStatus(object portObject)
{
    /*
     * For information about this method functionality 
     * please refer to the information file attached to this project on the folder "Information"
     */
    int port = (int)portObject;
    ComputerInfo computerInfo = ComputerInfo.Instance;
    if (computerInfo.isNetworkAvailable())
    {
        using (WebClient browser = new WebClient())
        {
            string content = browser.DownloadString(Properties.Settings.Default.CheckPortURL.Replace("{0}", port.ToString()));
            if (content.Contains("is responding"))
            {
                InsertLog(1, "TCP port " + port + " is open");
            }
            else
            {
                InsertLog(3, "TCP port " + port + " is closed");
            }
        }
    }
}

CPU が常に 35% 使用されるため、スレッドが実行され続けることはわかっていますが、コメントするt.Start(_ExternalPort);と、アプリケーションは正常に実行されます。

また、データベースで結果を確認できるので、作業が完了したことを確認できます。

Web ページからの結果が処理された (メソッドを使用してデータベースに追加された)後、スレッドtを停止して破棄するべきではありませんか?InsertLog

4

0 に答える 0