我想殺死一個線程,當發生非常糟糕的事情時。你有什麼建議做線程自殺?線程自殺問題
Q
線程自殺問題
0
A
回答
2
你不應該真的「殺死」一個線程。從您的主程序中,您可以使用Thread.Abort方法中止它,但這不被推薦,並且完全沒有必要。
你的線程應該只是一個執行長循環的方法。如果發生「非常糟糕」的事情,只需從該方法返回並且線程將結束。
這將這樣的循環已經足夠了:
private void MyThreadLoop()
{
try
{
while (someCondition)
{
// do a lengthy operation
}
}
catch (Exception ex)
{
Log.Error("Something bad happened: ", ex);
}
}
public void Start()
{
Thread t = new Thread(MyThreadLoop);
t.Start()
}
在另一方面,如果你需要你的主要計劃殺死線程(但這不是一個「自殺」,你把它命名爲),那麼你應該信號線程,你想它結束,而不是中止它不知道後臺發生了什麼。
0
有沒有必要完全殺死一個線程,所有你需要做的就是讓它停止對當前任務的工作。
0
線程內部,它足以從其函數返回。在線程之外,有方法Thread.Abort()。
0
你可以嘗試這樣的事情。線程運行,直到它從「外部」接收到一個信號,然後存在。
private static void Main(string[] args)
{
var shouldExit = new AutoResetEvent(false);
ThreadPool.QueueUserWorkItem(
delegate
{
while (true)
{
Console.WriteLine("Running...");
if (shouldExit.WaitOne(0)) break;
}
Console.WriteLine("Done.");
});
// wait a bit
Thread.Sleep(1000);
shouldExit.Set();
Console.ReadLine();
}
相關問題
- 1. 老問題:如何立即殺死一個線程在c#
- 2. 線程問題
- 3. 線程問題
- 4. 線程問題
- 5. 線程問題
- 6. 線程問題
- 7. 線程問題
- 8. 線程問題
- 9. ASP.NET自定義HttpContext線程問題
- 10. 從主線程中查殺線程
- 11. 多線程問題
- 12. C#線程問題
- 13. 跨線程問題?
- 14. WPF線程問題
- 15. iphone:線程問題?
- 16. 問題與線程
- 17. WPF線程問題
- 18. Java線程問題
- 19. C#線程問題
- 20. Android線程問題
- 21. C#線程問題
- 22. Java線程問題
- 23. Android線程問題
- 24. 多線程問題
- 25. iPhone線程問題
- 26. 多線程問題
- 27. ASP.NET線程問題
- 28. java線程問題
- 29. UIGraphicsGetCurrentContext線程問題
- 30. 線程問題(EXC_BAD_ACCESS)
殺死一個線程**是一件非常糟糕的事情。 – 2010-11-16 07:37:37
請參閱[如何在C#中立即殺死線程? ](http://stackoverflow.com/questions/1327102/how-to-kill-a-thread-instantly-in-c)。另外,我認爲你的意思是殺人...... :) – 2010-11-16 07:38:14
如果你強制線程 – Toad 2010-11-16 07:39:55