gpt4 book ai didi

c# - 从测试单元显示 WPF 窗口

转载 作者:太空狗 更新时间:2023-10-30 00:03:15 29 4
gpt4 key购买 nike

我正在运行一个测试单元(并了解它们)。很简单,我的单元创建一个列表并将其传递到我的主窗口。

我遇到的问题是在我 show() 主窗口之后 unit 方法结束。我希望在关闭 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;
}

也许我必须将它放到后台工作线程上并对其进行监控 - 老实说我不知道​​,在我浪费时间之前,我希望得到一些指导。

最佳答案

必须在支持 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 单元中运行。

欲了解更多信息,请访问 this link .

关于c# - 从测试单元显示 WPF 窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13381967/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com