启动非模态报告查看器窗口

时间:2014-02-12 02:21:06

标签: multithreading winforms reportviewer non-modal

我的Winforms应用程序需要启动一个或多个非模态报表查看器窗口,然后主窗口开始其业务(包括打开模式对话框)。我在earlier article

中找到了以下代码(H. Passant)
private void button1_Click(object sender, EventArgs e) {
    var t = new System.Threading.Thread(() => Application.Run(new Form2()));
    t.SetApartmentState(System.Threading.ApartmentState.STA);
    t.Start();
}

在我的情况下,“Form2”包含一个停靠的ReportViewer控件,用于显示所需的报告[new frmRptView(sReport,aRptParams)]。

在我的测试过程中,所有似乎都运行良好,但是当我向测试人员提供构建时,他们报告查看器窗口有时会锁定,并且摆脱它们的唯一方法是注销或重新启动。我们在使用form.Show()时遇到了同样的麻烦。

编辑:启动非模态窗口的正确方法是什么,因此它将独立于主应用程序窗口?

1 个答案:

答案 0 :(得分:0)

如果你只需要显示一个非模态窗口,它的生命周期不比主窗口长,那么只需创建一个表单实例并从你的按钮点击处理程序中显示它。这比创建多个UI线程更简单,更安全。

private void button1_Click(object sender, EventArgs e) 
{
   (new Form2()).Show();
}