从测试单元显示WPF窗口

我正在运行一个测试单元(并了解它们)。 很简单,我的单位创建一个List并将其传递给我的MainWindow。

我遇到的问题是在show()单元方法结束的主窗口之后。 在关闭MainWindow之前,我希望装置不能完成。 这就是我所做的(见下文) – 它显然不起作用,感觉我在这里走错了路。 我怎么能这样做呢?

  [TestClass] public class Logging { bool continueOn = true; [TestMethod] public void ShowLogs() { ShowResults(createLogList()); } private void ShowResults(List logList) { MainWindow mw = new MainWindow(logList); mw.Closed += mw_Closed; mw.Show(); while (continueOn) { } } void mw_Closed(object sender, EventArgs e) { this.continueOn = false; } private List createLogList() { List listLog = new List(); //logic return listLog; } 

也许我必须把它放到后台工作者的线程上并监控它 – 说实话我不知道,在我浪费时间之前,我会感激一些指导。

必须创建WPF窗口并在支持WPF窗口基础结构(消息泵送)的线程上显示。

 [TestMethod] public void TestMethod1() { MainWindow window = null; // The dispatcher thread var t = new Thread(() => { window = new MainWindow(); // Initiates the dispatcher thread shutdown when the window closes window.Closed += (s, e) => window.Dispatcher.InvokeShutdown(); window.Show(); // Makes the thread support message pumping System.Windows.Threading.Dispatcher.Run(); }); // Configure the thread t.SetApartmentState(ApartmentState.STA); t.Start(); t.Join(); } 

注意:

  • 必须创建窗口并在新线程内显示。
  • 您必须在ThreadStart返回之前启动调度程序(System.Windows.Threading.Dispatcher.Run()),否则窗口将很快显示并死亡。
  • 该线程必须配置为在STA公寓中运行。

有关更多信息,请访问此链接 。

当然,因为它仅用于测试,使用

 ShowDialog() 

可能是一个选项而不是’Show()’