我正在使用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();
我该如何解决这个问题?
答案 0 :(得分:0)
尝试uiThread.IsBackground = false;
您可以将LoginWindow
的新实例发送到该主题吗?
uiThread.Start(new LoginWindow());
然后使用Thread委托中的loginWindow参数Show
。
我想这会导致窗口在当前的调度程序上下文中呈现并将其呈现在前景上。
答案 1 :(得分:0)
我会在创建 ShellWindow 之前创建 loginWindow ,就在 ConfigureContainer()结束之前。
这样您就不会不必要地创建视图 - 您所在地区的视图模型。
请注意,在显示 ShellWindow 之前关闭窗口非常重要(例如,在成功登录时隐藏它),否则应用程序也将关闭。