从测试单元显示WPF窗口

Dav*_*ave 5 c# wpf

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

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

    [TestClass]
    public class Logging
    {
        bool continueOn = true;
        [TestMethod]
        public void ShowLogs()
        {
            ShowResults(createLogList());
        }

        private void ShowResults(List<Log> 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<Log> createLogList()
        {
            List<Log> listLog = new List<Log>();
            //logic 
            return listLog;            
        }
Run Code Online (Sandbox Code Playgroud)

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

Art*_*nes 14

必须创建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();
    }
Run Code Online (Sandbox Code Playgroud)

注意:

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

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