代码执行所有onStartup()而不等待视图中的用户输入

时间:2014-08-08 19:47:22

标签: c# wpf startup app.xaml

希望这是有道理的。

我有这样的事情:

protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);

            if (!Directory.Exists(dataFolder))
            {
                Directory.CreateDirectory(dataFolder);
            }

            try
            {
               using (DataContext context = new DataContext())
                   {
                        context.Database.CreateIfNotExists();
                   }

            }
            catch (IOException ex)
            {

            }

            KeyProgram.Show();

            if (Manager.KeyExists == true)
            {
            MainWindowViewModel viewModel = new MainWindowViewModel();

            this.MainWindow = new MainWindow();
            this.MainWindow.DataContext = viewModel;
            this.ShutdownMode = System.Windows.ShutdownMode.OnMainWindowClose;

            Helper.WindowDialogService.SetOwner(this.MainWindow);

            viewModel.Init();

            this.MainWindow.Show();

            }
            else {

                Console.WriteLine("Please try again"); 

            } 

        }

在显示我的licensekey窗口后,我想打破以便系统需要用户输入(让用户输入许可证密钥)然后继续运行if-else语句(在if(LicenseKeyManager.licenseKeyExists == true) ))。

但是目前,在onStartup上,应用程序只是先运行所有代码然后如果我输入密钥并对其进行验证,它就不会运行if语句,因为它已经运行了。

在继续使用if语句之前,如何从视图中断用户输入?

现在在LicenseKeyProgram.Show()之后,如果我在if语句处设置断点,那么应用程序不会让用户输入任何内容,因为它会在加载时停止(Can' t在窗口上执行任何操作)。

我在这里需要一个事件处理程序还是......?

1 个答案:

答案 0 :(得分:4)

使用ShowDialog而不是Show。

相关的MSDN链接:

http://msdn.microsoft.com/en-us/library/system.windows.window.showdialog%28v=vs.110%29.aspx


  

哦等等,还有一个问题,我可以获得用户输入但appplication不会运行/命中if-else语句?为什么呢?

您必须在调用其他窗口上的showdialog之前设置主窗口,否则它将触发应用程序的关闭(因为应用程序将在所有窗口关闭时关闭)。

示例:

protected override void OnStartup(StartupEventArgs e)
{
    base.OnStartup(e);

    MainWindow window = new MainWindow();

    Window1 test = new Window1();
    test.ShowDialog();

    if (test.InvalidLicense)
    {
        Shutdown();
        return;
    }

    window.Show();
}

Ressources:

WPF showing dialog before main window

http://www.ageektrapped.com/blog/the-wpf-application-class-overview-and-gotcha/