C# 虽然我使用的是一个仍然挂起的后台工作GUI。。。
我有一个GUI,在那里我必须导入一些文档,但是当我使用后台工作程序时,GUI挂起,这不能发生,因为我使用的是后台工作程序,为什么会发生这种情况?请在下面查找代码C# 虽然我使用的是一个仍然挂起的后台工作GUI。。。,c#,.net,user-interface,backgroundworker,C#,.net,User Interface,Backgroundworker,我有一个GUI,在那里我必须导入一些文档,但是当我使用后台工作程序时,GUI挂起,这不能发生,因为我使用的是后台工作程序,为什么会发生这种情况?请在下面查找代码 void ImportNotes_ContextMenuStripItem_Click(object sender, EventArgs e) { if (!backgroundWorker_notesImport.IsBusy) { mainFrm.ProgressBar.Visible = true;
void ImportNotes_ContextMenuStripItem_Click(object sender, EventArgs e)
{
if (!backgroundWorker_notesImport.IsBusy)
{
mainFrm.ProgressBar.Visible = true;
backgroundWorker_notesImport.RunWorkerAsync();
}
}
private void backgroundWorker_notesImport_DoWork(object sender, DoWorkEventArgs e)
{
ImportNotes();
}
private void backgroundWorker_notesImport_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
mainFrm.ProgressBar.Value = e.ProgressPercentage;
}
void ImportNotes() { }
ImportNotes()
方法只是在一大步中完成整个导入吗
如果是这样,那么您仍然没有给UI做任何事情的机会。显示了应如何使用它:
// This event handler is where the time-consuming work is done.
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
for (int i = 1; i <= 10; i++)
{
if (worker.CancellationPending == true)
{
e.Cancel = true;
break;
}
else
{
// Perform a time consuming operation and report progress.
System.Threading.Thread.Sleep(500);
worker.ReportProgress(i * 10);
}
}
}
//此事件处理程序是完成耗时工作的地方。
私有void backgroundWorker1\u DoWork(对象发送方,DoWorkEventArgs e)
{
BackgroundWorker worker=发件人作为BackgroundWorker;
对于(int i=1;i)你更新进度条多少次。如果你去掉进度条挂钩,挂起会消失吗?通过GUI挂起,你是说窗口甚至不会重新绘制,不能调整大小,等等?还是说进度条不会更新?这段代码不会挂起你的GUI。你一定漏掉了重要的一点