Form.ShowDialog()不显示启用调试的窗口

我在unit testing项目中创建了一个测试,我希望在其中使用ShowDialog()函数弹出一个Form

 [TestMethod] public void TestDialog() { // This class inherits from Form TestForm serviceTestForm = new TestForm("My test form"); serviceTestForm.ShowDialog(); return; } 

我希望这个测试能够达到ShowDialog() ,并且无限期地运行,直到我关闭窗口。 但是,当我“使用调试”运行此测试时,测试到达ShowDialog() ,并且不显示任何表单。 奇怪的是,如果我运行“没有调试”,这个完全相同的测试工作

我需要能够“通过调试”运行测试并显示窗口。

其他说明:

  • Show()是不可取的,因为它不等待窗口关闭继续。 (除此之外……它不起作用。)
  • 这个代码以前在使用.NET 3.5的另一个项目上工作过。 这只是说ShowDialog()策略之前肯定有效。 (是的,我直接复制了那个工作代码。)
  • 我的问题类似于这个问题,但是,我的表单不是另一个对话框的子代,并且不在父UI线程中。

尽管我试图避免构建使用System.Windows.Formsunit testing,但我遇到了一个奇怪的情况,我也需要它,并通过处理Load事件并明确设置Visible = true来解决它。 当从测试方法调用ShowDialog时,这会强制表单可见。

 private void form1_Load(object sender, EventArgs e) { // To support calling ShowDialog from test method... this.Visible = true; ... } 

或者,只需从测试方法中观察表单实例,然后在那里执行相同的操作。 至少这可以进一步缓解这个问题,因为它可以防止黑客攻击表单的代码。

 var frm = new Form1(); frm.Load += (sender, e) => (sender as Form1).Visible = true; frm.ShowDialog();