如何在UI线程繁忙时打开另一个具有进度栏的表单

时间:2018-11-08 10:48:23

标签: c# multithreading backgroundworker

我尝试过后台工作者。当调用用于加载数据库数据的函数时,我也调用了backgroundworker,并且我想打开另一个具有进度栏的表单,当加载数据完成时,我想关闭该表单并让用户正常使用应用程序。我试过了

private void SearchBtn_Click(object sender, EventArgs e)
{
    backgroundWorker1.RunWorkerAsync();
   //loading data
}

这是一个需要很长时间才能执行的函数,所以我叫后台工作器。

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
    f.Show();
}

private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    f.Close();
}

f是我的表单全局变量,当我这样写时,出现错误,我无法关闭已在另一个线程中打开的表单。所以我做错了什么。

1 个答案:

答案 0 :(得分:0)

您必须在拥有控件的线程上Invoke方法:

Invoke(new Action(() => f.Close()));

看看Invoke方法。