サーバーを起動する次の方法があります。
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