1

我的 Winforms 应用程序需要启动一个或多个非模态报表查看器窗口,然后主窗口开始其业务(包括打开模态对话框)。我在之前的文章中找到了下面的代码(由 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() 时也遇到了同样的问题。

编辑:启动非模式窗口以使其独立于主应用程序窗口的正确方法是什么?

4

1 回答 1

0

如果您只需要显示一个寿命不长于主窗口的非模态窗口,只需创建一个表单实例并从您的按钮单击处理程序中显示它。这比创建多个 UI 线程简单且安全得多。

private void button1_Click(object sender, EventArgs e) 
{
   (new Form2()).Show();
}
于 2014-02-13T14:33:15.233 回答