3
我正在使用線程在我的程序的後臺運行計算。我在我的程序開始時啓動線程。如果我在線程完成之前按下按鈕,將會打開statusBar並將「openedStatus」設置爲true。後臺線程完成後C#執行方法
這將顯示線程目前的進展和線程完成後,我想執行我的代碼的最後一部分:
if (openedStatus)
{
sb.Close();
validateBeforeSave();
}
的這部分代碼將拋出一個異常,但因爲你可以」關閉狀態欄跨線程。
現在的問題是:如何在線程完成後執行代碼的最後部分?
private StatusBar sb = new StatusBar();
private void startVoorraadCalculationThread()
{
sb.setMaxProgress(data.getProducten().getProductenCopy().Count);
Thread thread = new Thread(new ThreadStart(this.run));
thread.Start();
while (!thread.IsAlive) ;
}
private void run()
{
for (int i = 0; i < data.getProducten().getProductenCopy().Count; i++)
{
sb.setProgress(i);
sb.setStatus("Calculating Voorraad: " + (i+1) + "/" + data.getProducten().getProductenCopy().Count);
data.getProducten().getProductenCopy()[i].getTotaalVoorraad(data.getMaten());
}
if (openedStatus)
{
sb.Close();
validateBeforeSave();
}
calculationFinished = true;
}
移動的最後一部分回你的主線程?爲什麼不使用背景工作? – Bolu
是的,但是如果我將最後一部分移回,則無法檢查線程是否已完成執行,是嗎? 我會看看背景工作,謝謝。 – Duckdoom5
我想'Thread.IsAlive'會告訴你線程是否完成/中止。但是,'BackgroundWorker'更容易 – Bolu