我正在使用Prism的MefBootstrapper初始化我的WPF应用程序,作为此过程的一部分,Shell窗口正在初始化 .
在运行MefBootstrapper的Run()方法之后,我显示一个连接到服务器的登录窗口,如果连接成功,则加载Shell(从主UI线程) .
此登录窗口在新的专用UI线程上运行,以便不冻结此过程中的进度条(连接到服务器,尤其是Shell加载) .
不幸的是,登录窗口没有显示在顶部而没有显示(即使我正在使用:Activate(),TopMost = true,Focus()) .
//UI mode - a new UI thread is initialized
var uiThread = new Thread(() =>
{
var loginWindow = new LoginWindow();
loginWindow.Show();
loginWindow.Activate();
loginWindow.Topmost = true;
loginWindow.Topmost = false;
loginWindow.Focus();
System.Windows.Threading.Dispatcher.Run();
});
uiThread.SetApartmentState(ApartmentState.STA);
uiThread.IsBackground = true;
uiThread.Start();
我该如何解决这个问题?
2 回答
试试
uiThread.IsBackground = false;
你能把
LoginWindow
的新实例发送给线程吗?然后使用Thread委托中的loginWindow参数为
Show
.我想这会导致窗口在当前的调度程序上下文中呈现并将其呈现在前景上 .
我会在创建ShellWindow之前创建loginWindow,就在ConfigureContainer()结束之前 .
这样您就不会不必要地创建视图 - 您所在地区的视图模型 .
请注意,在显示ShellWindow之前不要关闭窗口(即成功登录时隐藏它),否则应用程序也将关闭 .