在System.Threading中杀死旧线程并启动新线程
本文关键字:线程 启动 新线程 Threading System | 更新日期: 2023-09-27 18:06:06
我已经为我的ip扫描仪应用程序创建了一个线程。现在当用户点击开始按钮时,它将启动线程,进行扫描并生成ID。
ID | printer_ip
---------------
1 | 10.0.0.0
2 | 10.0.0.1
3 | 10.0.0.2
但问题是,当用户想要再次单击开始按钮重新扫描之前的进程完成,它看起来像ID变得混乱。
ID | printer_ip
---------------
1 | 10.0.0.0
4 | 10.0.0.3
2 | 10.0.0.1
我注意到这是因为当新线程运行时,旧线程仍在运行。因此,如何杀死旧线程每当用户重新点击开始扫描按钮?我可以使用Thread.Abort()方法吗?如果有,我应该把它放在哪里?
private void StartClick(object sender, System.EventArgs e)
{
sercher = new Thread(new ThreadStart(Serche));
try
{
IPAddress from = IPAddress.Parse(ipFrom.Text);
IPAddress to = IPAddress.Parse(ipTo.Text);
}
catch (FormatException fe)
{
MessageBox.Show(fe.Message);
return;
}
sercher.Name = "Network searching thread";
sercher.Start();
//add.Items.Add("-->> >>> Please wait while processing is done <<< <<--");
Thread.Sleep(1);
}
终止线程的正确方法是使用标志。您检查线程中的标志,如果它升起,则退出该线程。例如:
while (!IsCancelled)
{
//Scan a single IP here...
}
当你再次点击"开始"时,你应该首先升起标志(IsCancelled = true),调用Thread。Join等待该线程停止,然后再重新启动该线程。
注:不要试图使用Thread.Abort!非常非常糟糕