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