2017-02-16 7 views
0

私はrunnigのWPFアプリケーションの前にダイアログウィンドウを開こう:なぜWindow.ShowDialogがアプリケーションを実行するのですか?

public class Program 
{ 
    [STAThread] 
    public static void Main(string[] args) 
    { 
     var app = new App(); 
     var win = new MainWindow(); 
     if (win.ShowDialog().GetValueOrDefault()) 
     { 
      app.Run(); 
     } 
    } 
} 

class App : Application 
{ 
    protected override void OnStartup(StartupEventArgs e) 
    { 
     base.OnStartup(e); 
     var win = new Window1(); 
     win.Show(); 
    } 
} 

はなぜwin.ShowDialogは()(app.OnStartupが実行される)アプリケーションを実行しますか?この動作はなぜ しかし、win.Show()は、アプリ

[STAThread] 
    public static void Main(string[] args) 
    { 
     var app = new App(); 
     var win = new MainWindow(); 
     win.Show(); 
     app.Run(); 
    } 

を実行していません?

おかげ

+0

'Show'に使用するコードを表示します - ブール値を返さないため、' if'の中では使用できません。 –

+0

あなたはwpfの動作について故意に興味がありますか、メインウィンドウを表示する前にダイアログを表示するという問題を解決したいだけですか? – Default

+0

[メインウィンドウの前にダイアログを表示するWPF]の複製があります(http://stackoverflow.com/questions/1539958/wpf-showing-dialog-before-main-window) – Default

答えて

0

ShowDialogは、独自のメッセージループを開始します。 Application.Runとほぼ同じことを行います。アプリケーションのインスタンスをすでに作成しているので、起動メッセージ(ウェル、ディスパッチ)は既に送信されており、メッセージループ(ディスパッチャ)によってShowDialogに解釈されます。 Showは基本的にメッセージをキューに送信するだけなので、メッセージを処理するメッセージループがない限り何もしません。

起動が登録される前にダイアログを表示する場合は、ダイアログを表示する前にアプリケーションインスタンスを作成しないでください。

関連する問題