我需要在兩臺不同的服務器上執行一項耗時的任務。關閉GUI時殺死線程
服務器的數量可能會有所不同。
我需要在大致相同的時間在每臺機器上執行相同的任務,否則它會使此過程花費的時間增加四倍。
到目前爲止,我已經能夠拿出這樣的:
public partial class Form_main : Form
{
list<string> vms = new list<string>;
///Fill in vms...
private void startTest()
{
///prevents GUI from hanging
ThreadPool.QueueUserWorkItem(new WaitCallback(runTests));
}
pirvate void runTests()
{
///Some setup stuff (~1 min)
foreach(string vm in vms)
{
ThreadPool.QueueUserWorkItem(new WaitCallback(testProcedure), new object[] {vm});
}
}
}
這適用於同時運行的一切,但問題是,如果GUI被殺死線程沒有得到與它一起遇難。我想象它會殺死runTests線程,但不會終止testProcedures線程。
我該怎麼做才能讓testProcedures線程在關閉GUI時被殺死?
當你關閉GUI時,Application.Run(...)運行完成並退出'static void Main(string [] args)'方法?後臺線程不會自動殺死,直到所有的forground線程完成。 「Main」不是正在退出,或者您正在其他地方創建前景線程,而您沒有顯示。 –
與[aborting](http://stackoverflow.com/a/1560567/533120)相反,您應該協作退出線程(即設計一種機制,以便您可以「向線程發出信號」,以便在接下來應該優雅地停止適時的時刻)。並考慮使用[任務](http://msdn.microsoft.com/en-us/library/ff963549.aspx)(及其取消令牌)而不是「裸」線程。 –