我寫了一個C#程序通過backgndWorkerEnroll_DoWork
這反過來又通過一個線程調用另一個函數來調用一個函數。第一次啓動線程後,該功能正常工作。我然後使用thread.Abort()
方法終止線程並再次調用thread.Start()
方法。前面的函數調用仍然有效,但不會中止。我如何強制關閉線程?線程終止在C#
public int capture()
{
System.Threading.Thread thEnroll = new System.Threading.Thread(delegate()
{
// winbio.OpenSession1();
refresult1 = winbio.Enroll1(finger, false, refresult);
//winbio.Enroll1(finger, false, refresult, out refresult1);
});
thEnroll.Name = "thEnroll";
thEnroll.Start();
while (true)
{
if (!thEnroll.IsAlive)
break;
}
thEnroll.Abort();
return result;
}
private void backgndWorkerEnroll_DoWork(object sender, DoWorkEventArgs e)
{
capture();
}
還有一個query.how強制關閉backgroundDo_Work通過按鈕單擊事件。
這不是一般的工作,指紋讀取器將幾乎總是被埋沒非託管代碼中,等待司機吐的東西了。像這樣的代碼不能被中止,只有託管代碼可以被CLR安全地中斷。你將需要一個單獨的進程,你可以殺死()。 – 2013-03-18 12:17:33
是什麼在等待,直到線程是死點(嘗試)殺呢?你爲什麼要在可能需要幾秒鐘的操作上進行spinlock? – MattW 2013-03-18 12:28:59
高度相關:[如何停止無響應的線程?](http://stackoverflow.com/questions/11798080/how-to-stop-a-non-responsive-thread/11798203#11798203)...短版本:'Thread.Abort'受到了阻礙,你無法真正相信它離開你的應用程序域的狀態。找到另一種方式。 :P – cHao 2013-03-18 12:51:53