我想用进度条选框显示一个新表单。此表单应位于其他线程上,因为调用的操作太大,如果进度条位于同一线程上,则UI不会更新进度条。
我调用一个新线程,创建我的表单,但一出现,表单就会关闭......
以下是我的主要代码:
frmProgress f = new frmProgress();
Thread t = new Thread(new ThreadStart(delegate() { f.Show(); }));
t.Start();
documentManager.Compile(); //This is my big action
t.Abort();
以下是表格代码:
public frmProgress()
{
InitializeComponent();
}
我想知道我做错了什么。
谢谢!
答案 0 :(得分:3)
你有几个问题:
您需要在UI线程中显示论坛,并在后台线程中运行长时间运行的任务。
这里工作的一个很好的工具是使用BackgroundWorker
。它将为您完成大部分工作,以确保正确的代码在UI /非UI线程中运行。创建一个新的BackgroundWorker
并将长时间运行的任务放在DoWork
事件中。在启动BGW之前进行所需的任何简单UI更新(显示表单),并在Completed
事件(将在UI中运行)中进行任何清理。 MSDN page on BackgroundWorker有一些nice examples。
使用BackgroundWorker
的另一个好处是,您可以轻松报告进度(如果您有一个很好的方法来了解您的完成百分比),而不仅仅是有一个选框栏。只需向ProgressReported
事件处理程序添加一个处理程序即可更新进度条,并在执行工作时定期调用ReportProgress
方法。有关确切的代码段,请参阅链接的示例。