单元测试中的 WPF 组件

WPF component in unit testing

我正在编写单元测试代码,出于调试目的,我确实需要查看一些数据(请不要讨论是否应该使用 UI 进行单元测试)

我创建了一个 UI 线程并像这样启动了我的组件:

System.Threading.Thread newWindowThread = new Thread(new ThreadStart(() =>
        {
            SynchronizationContext.SetSynchronizationContext(
                new DispatcherSynchronizationContext(
                    Dispatcher.CurrentDispatcher));
            plotter = new PlotterWPF();
            plotter.Closed += (s, e) =>
               Dispatcher.CurrentDispatcher.BeginInvokeShutdown(DispatcherPriority.Background);

            plotter.Show();
            plotter.init();

            System.Windows.Threading.Dispatcher.Run();
        }));

    newWindowThread.SetApartmentState(ApartmentState.STA);
    newWindowThread.Start();

这有效并且绘图仪出现在屏幕上,我的问题是之后当我想将东西发送到绘图仪时我这样做:

public void debugFrame(Gtec2.Frame frame)
{
    plotter.Dispatcher.Invoke(() =>
    {
        plotter.Plot(frame);
    });
}

它失败了,因为绘图仪为空(在 plotter.Dispatcher... 部分)

我尝试使用 Applicaiton.Current.Dispatcher 但是 .. application.Current 为空。

我也尝试在线程外创建绘图仪,但是..我不能,因为不是 STA。我认为现在应该有办法让事情发生,我的 Dispatcher 是 newWindowThread 并且 dispatcher.Invoke 应该在那里发生但是..我不知道该怎么做..

有什么建议吗?

dispatcher = System.Windows.Threading.Dispatcher.FromThread(newWindowThread);

这将获取该特定线程的调度程序,从那里可以做到

  dispatcher.Invoke(() =>
  { 
      /*here you can access the plotter */ 
  });