1

Prism の MefBootstrapper を使用して WPF アプリケーションを初期化しています。このプロセスの一環として、シェル ウィンドウが初期化されています。

MefBootstrapper の Run() メソッドを実行した後、サーバーに接続するログイン ウィンドウを表示しています。接続が成功した場合は、(メイン UI スレッドから) シェルが読み込まれます。

このログイン ウィンドウは、このプロセス (サーバーへの接続、特にシェルの読み込み) でプログレス バーがフリーズしないように、新しい専用の UI スレッドで実行されます。

残念ながら、ログインウィンドウは上部に表示されず、フォーカスされていません(使用しているときでも: 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();

この問題を解決するにはどうすればよいですか?

4

2 に答える 2

0

試すuiThread.IsBackground = false;

の新しいインスタンスをLoginWindowスレッドに送信できますか?

        uiThread.Start(new LoginWindow());

次に、Thread デリゲートの loginWindow パラメータを に使用しますShow

これにより、ウィンドウが現在のディスパッチャー コンテキストでレンダリングされ、フォアグラウンドでレンダリングされると思います。

于 2013-06-26T14:24:03.393 に答える
0

ConfigureContainer()が終了する直前に、ShellWindow が作成される前にloginWindowを作成します。

そうすれば、不必要にビュー (リージョンにビューモデル) を作成することはありません。

ShellWindowを表示する前にウィンドウを閉じないでください(つまり、ログインが成功したときにウィンドウを非表示にします)。そうしないと、アプリケーションも閉じてしまいます。

于 2016-04-13T14:00:25.947 に答える