0

我已经设置了我的报告列表,以便它通过 BackgroundWorker 打开一个表单:

        if (bw_ReportWorker.IsBusy != true)
        {
            // start it
            bw_ReportWorker.RunWorkerAsync();
        }

在 DoWork() 中是这样的:

  private void bw_ReportWorker_DoWork(object sender, DoWorkEventArgs e)
    {
        _rl = new ReportList();
        _rl.ShowDialog();
    }

报告列表出现,然后您可以选择所需的报告。当您选择一个报告时,会打开另一个适合该报告的窗口。所有报告都正确显示在屏幕上,但一旦我尝试打印或导出,应用程序就会挂起。如果我不使用 BackgorundWorker 而是报告列表,我可以导出和打印我想要的所有内容。为什么会挂?以及如何解决这个问题?该程序在带有 .NET 4.5 的 Winforms 中

谢谢

4

1 回答 1

0

您正在从工作线程运行对话框。这不是一个好的行为。这就是 UI 挂起的原因。唯一应该运行 Dialog 的线程,顺便说一下挂起打开的表单,是 UI 线程。

如果您想打开一个表单而不是挂起打开它的表单,请使用Show()

于 2013-09-12T08:19:40.383 回答