C# 多线程:新窗体关闭过快
我想显示一个带有进度条字幕的新表单。这个表单应该在另一个线程上,因为调用的操作太大,如果它在同一个线程上,UI不会更新进度条 我调用一个新线程,创建我的表单,但一旦它出现,表单就会关闭 以下是我的主要代码:C# 多线程:新窗体关闭过快,c#,multithreading,forms,progress-bar,marquee,C#,Multithreading,Forms,Progress Bar,Marquee,我想显示一个带有进度条字幕的新表单。这个表单应该在另一个线程上,因为调用的操作太大,如果它在同一个线程上,UI不会更新进度条 我调用一个新线程,创建我的表单,但一旦它出现,表单就会关闭 以下是我的主要代码: frmProgress f = new frmProgress(); Thread t = new Thread(new ThreadStart(delegate() { f.Show(); })); t.Start(); documentManager.Co
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();
}
我想知道我做错了什么
谢谢 您有几个问题:
BackgroundWorker
。它将为您完成许多工作,以确保在UI/非UI线程中运行正确的代码。创建一个新的BackgroundWorker
,并将长时间运行的任务放入DoWork
事件中。在启动BGW之前,进行所需的任何简单UI更新(显示表单),并在Completed
事件(将在UI中运行)中执行任何清理。有一些
使用
BackgroundWorker
的另一个优点是,您可以轻松地报告进度(如果您有一个了解完成百分比的好方法),而不仅仅是有一个选框栏。只需在ProgressReported
事件处理程序中添加一个处理程序来更新进度条,并在执行工作时定期调用ReportProgress
方法。请参阅链接的示例以了解确切的代码片段。您有几个问题:
BackgroundWorker
。它将为您完成许多工作,以确保在UI/非UI线程中运行正确的代码。创建一个新的BackgroundWorker
,并将长时间运行的任务放入DoWork
事件中。在启动BGW之前,进行所需的任何简单UI更新(显示表单),并在Completed
事件(将在UI中运行)中执行任何清理。有一些
使用
BackgroundWorker
的另一个优点是,您可以轻松地报告进度(如果您有一个了解完成百分比的好方法),而不仅仅是有一个选框栏。只需在ProgressReported
事件处理程序中添加一个处理程序来更新进度条,并在执行工作时定期调用ReportProgress
方法。查看链接的示例以获取精确的代码片段。您是否查看了BackgroundWorker
类及其ReportProgress
方法?是的,但我认为使用“new Thread()”并在完成后中止会更简单…@LolCat No,实际上要简单得多。@LolCat创建一个简单的测试应用程序,并使用Servy答案中引用的示例,可能会很麻烦。一旦我熟悉了BackgroundWorker,我的生活就轻松了很多次。那我就试试BackgroundWorker。感谢你们两位。你们看过BackgroundWorker
类和它的ReportProgress
方法吗?是的,但我认为使用“new Thread()”和在我完成后中止会更简单…@LolCat No,实际上要简单得多。@LolCat创建一个简单的测试应用程序,并使用Servy答案中引用的示例,可能会很麻烦。一旦我熟悉了BackgroundWorker,我的生活就轻松了很多次。那我就试试BackgroundWorker。谢谢你们两位。