作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想打开一些非模型窗口(WPF),但是在这种情况下,我必须处于非STA线程上。因此,我启动了一个新线程并在那里打开它们。但是,一旦打开,它们就会再次关闭。 (顺便说一句。这些窗口的行为应独立于主窗口。因此,未设置所有者属性)
private void SomeMethod_OnA_NON_STA_Thread()
{
// some other work here
Thread ANewThread = new Thread(OpenSomeWindows);
ANewThread.SetApartmentState(ApartmentState.STA);
ANewThread.Start();
}
private void OpenSomeWindows()
{
TestWindow T;
for (int i = 0; i < 3; i++)
{
T = new TestWindow();
T.Show();
}
}
最佳答案
如果要让窗口保持 Activity 状态,则必须在创建窗口后启动消息循环(否则,线程将退出,并且窗口没有机会渲染自己):
private void OpenSomeWindows()
{
for (int i = 0; i < 3; i++)
{
TestWindow T = new TestWindow();
T.Show();
}
Dispatcher.Run(); // <---------
}
List<TestWindow> windows = new List<TestWindow>();
for (int i = 0; i < 3; i++)
{
TestWindow t = new TestWindow();
t.Show();
windows.Add(t);
}
Dispatcher.Run();
private void SomeMethod_OnA_NON_STA_Thread()
{
// some other work here
Application.Current.Dispatcher.Invoke(OpenSomeWindows);
}
private void OpenSomeWindows()
{
for (int i = 0; i < 3; i++)
{
TestWindow T = new TestWindow();
T.Show();
}
// this way, no Dispatcher.Run is needed
}
关于wpf - 如何防止新的STA线程上的非模式窗口关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6203677/
我是一名优秀的程序员,十分优秀!