C# 虽然我使用的是一个仍然挂起的后台工作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;

我有一个GUI,在那里我必须导入一些文档,但是当我使用后台工作程序时,GUI挂起,这不能发生,因为我使用的是后台工作程序,为什么会发生这种情况?请在下面查找代码

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。你一定漏掉了重要的一点