如何在我的C#应用​​程序中杀死Thread?

我想在Button Click事件中杀死/销毁我的应用程序中的线程。

private void stop_btn_Click(object sender, EventArgs e) { Thread.Sleep(); } 

这个事件会挂断我的申请吗?

这是从我的线程开始的代码

  DataTable myTable = new DataTable();`enter code here` myTable = msgDataSet.Tables["text"]; DataRow[] myRow; myRow = myTable.Select(); for (int x = 0; x < myRow.Count(); x++ ) { SendKeys.SendWait(myRow[x]["msg"].ToString()); SendKeys.SendWait("{Enter}"); int sleep = int.Parse(textBox2.Text); Thread.Sleep(sleep); } Thread Spam1 = new Thread(new ThreadStart(Send1)); Spam1.Start(); 

请参阅此文章,了解为什么不应该尝试调用Thread.Abort

http://www.interact-sw.co.uk/iangblog/2004/11/12/cancellation

问题是你在那个线程中打破了exception安全。 这是因为Thread.Abort将在该线程中的某个任意点抛出exception,这可能是在加载资源之后,但在线程进入try / catch之前,该try / catch将支持清理卸载该资源。

相反,您应该在您在该线程中运行的代码中构建合作取消。 然后设置某种“取消请求”状态,让线程自杀。 例如:

 foreach(var value in aBunchOfData) { if(isCancelled) { break; } // Continue processing here... } 

在这种情况下,您将公开isCancelled ,并让您的父线程将其设置为true

如果使用BackgroundWorker实现后台线程,则会清除此模式。

如果要强制关闭线程,可以调用Abort() ,这会在目标线程上引发ThreadAbortedException

 myThread.Abort() 

目标线程有机会捕获它并在需要时清理任何资源(当然,如果它想通过捕获exception并继续前进它也可以忽略它,但这是IMO不好的做法)

您编写的代码将使UI线程进入hibernate状态 – >您的应用程序将挂起。 你如何实现线程? 如果您正在使用BackgroundWorker-您可以启用线程取消 ,如果您使用任务 – 您可以为其提供取消令牌 。 如果您使用Thread-您可以选择Abort()方法。
PS ..如果你想停止你的应用程序(主线程) – 你可以:
关闭主窗口|| 调用应用程序退出|| 呼叫过程杀死….