在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);
    }

在System.Threading中杀死旧线程并启动新线程

终止线程的正确方法是使用标志。您检查线程中的标志,如果它升起,则退出该线程。例如:

while (!IsCancelled)
{
  //Scan a single IP here...
}

当你再次点击"开始"时,你应该首先升起标志(IsCancelled = true),调用Thread。Join等待该线程停止,然后再重新启动该线程。

注:不要试图使用Thread.Abort!非常非常糟糕