并行任务滞后于表单加载

时间:2017-10-26 10:54:59

标签: winforms parallel.foreach

我在使用

的Form_Load之前运行两个长并行任务
private void task1()
{
    //Long task
}
private void task2()
{
    //Long task
}
Task tsk=new Task(task1);
Task tsk2=new Task(task2); 
Parallel.ForEach(new [] {tsk, tsk2},item=>item.Start());. 

在任务完成后打开表单时,表单会在最小化时通过单击任务栏中的应用程序按钮挂起30秒,然后变为活动状态。有办法克服这个问题吗? 谢谢

编辑添加:

private static bool modalDisposed=false;
private ModalLoad ml = new ModalLoad();
private void Form_Load(object sender,EventArgs e)
{
    ml.Show(this);
    Task tsk=new Task(task1);
    Task tsk2=new Task(task2); 
    Parallel.ForEach(new [] {tsk, tsk2},item=>item.Start());.
}
private void task1()
{
    //long task
    modalDisposed=true;
    System.Threading.Thread.Sleep(100);
    Application.OpenForms["ModalLoad"].Dispose();
}
private void task2()
{
    while(!modalDisposed)
    {
        ml.updateLabel();
    }
}

在模态表格中,我更新标签

private static int ui=0;
public void updateLabel()
{
    this.Invoke((MethodInvoker)delegate
    {
        lblUI.Text=ui+"";
        ui++;
    });
}

0 个答案:

没有答案