回答
創建線程的新實例並再次執行。 thread1 = new Thread(); thread1.start();
中止一個線程往往是一個壞主意。他是一名顧問。如果它是一個無限循環,則用於在沒有墮胎的情況下停止線程的布爾值。
bool run = true;
Thread thread = new Thread(method);
thread.start();
private void method()
{
while(run)
{
}
}
停止線程,只需設置布爾爲false,通常情況下,你可以重新啓動它。
很好的建議。 'run'應該是'volatile',以避免由於編譯器優化造成的無限期等待。 – Tudor 2012-03-06 10:34:25
考慮使用'lock',特別是在設置布爾值時。更好的是,將它與'monitor'結合使用。看看這裏:http://stackoverflow.com/questions/1559293/c-sharp-monitor-wait-pulse-pulseall#1559662 – 2012-03-06 10:44:43
當我點擊創建服務器時,我的線程函數開始。它執行一些初始化,然後進入包含socket.Accept()的無限循環。控制卡在這個語句,所以我不能使用這種鎖定方法。 – Shashwat 2012-03-06 12:57:00
Thread.Abort不保證線程會終止。例如,如果您有一個長時間運行的查詢,則Abort不會終止查詢的執行或取消該線程。事實上,線程將一直持續到查詢完成。
如果您在託管代碼中執行所有操作並且未被非託管資源鎖定,並且必須中止一個線程,那麼thread.Abort()就完全正確。
但是,您不能在已終止的線程上調用Start。您必須創建另一個線程並在該線程上調用Start。在.NET中(與其他語言相比),創建線程有點昂貴,內存明智,所以存在一些缺點。
實際上一次又一次地創建線程不會太昂貴,因爲它不會非常頻繁地完成。 – Shashwat 2012-03-06 12:58:52
當您想要從頭開始重新啓動線程時,您實際上想要重新啓動線程上的某個函數(代碼流)的執行。當你創建一個線程並傳遞一個執行函數時,一旦函數完成它自己的執行,線程的生命就會終止。你只需要改變你的代碼設計,這將允許重新啓動一個新的線程重新啓動函數。 但是對於簡短的功能,我建議使用ThreadPool。
由於您正在使用.NET 4.0,其中MS引入了「合作取消框架」。你可以從這個blog瞭解更多。 直接處理線程是(越來越不鼓勵)。
- 1. C#CF重新啓動一個線程
- 2. 如何重新啓動線程
- 3. 簡單的後臺線程在.NET中重新啓動
- 4. 重新啓動線程
- 5. 如何在C中重新啓動System.Threading.Tasks.Task#
- 6. 停止到啓動新的線程C#4.0
- 7. 在C中重新啓動程序
- 8. Android:重新啓動中斷線程onResume
- 9. 重新啓動正常的線程
- 10. 如何停止/啓動或重新啓動計時器線程
- 11. 如何在java中重新啓動線程?
- 12. .NET WPF當啓動新線程時MissingMethodException
- 13. C#.Net變量意外重新啓動
- 14. .NET Framework 4.0是否需要重新啓動?
- 15. 如何重新啓動我的窗口服務以編程方式在c#.net
- 16. 主題:如何在線程完成後重新啓動?
- 17. 如何使用標誌重新啓動線程中的操作?
- 18. 停止並重新啓動線程
- 19. Python異常後重新啓動線程
- 20. 在新線程中啓動課程
- 21. 如何在.NET 3.5中重用線程
- 22. 如何殺死應用程序線程並重新啓動它?
- 23. 線程服務。如何在延遲後重新啓動一些線程?
- 24. 「新線程」不啓動新線程?
- 25. 如何重新啓動/重置.Net中的SQL連接池?
- 26. 如何在.NET中每次啓動最多X個線程?
- 27. 重新啓動其他應用程序。 C#,.net
- 28. C++ boost ::線程,如何啓動線程內的線程
- 29. 如何重置值並重新啓動C程序
- 30. C++如何重新啓動if語句?
一般來說,'Abort()'線程是一個壞主意。你想解決什麼問題? – Heinzi 2012-03-06 10:23:49
這可以幫助你: - [重新啓動在C#4.0中的線索] [1] [1]:http://stackoverflow.com/questions/1054889/restarting-a-thread-in-net- using-c – Misam 2012-03-06 10:25:00
停止和啓動線程的要求有點不尋常 - 您嘗試解決什麼問題? – dice 2012-03-06 10:35:43