2017-02-16 3 views
0

я пытаюсь открыть диалоговое окно перед нанесением Runnig МОФ:Почему 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 в основном отправляет сообщение в очередь, поэтому он ничего не делает, если не обрабатывается сообщение.

Если вы хотите показать диалоговое окно перед регистрацией запуска, не создавайте экземпляр приложения перед тем, как показывать диалог.

Смежные вопросы