【问题标题】:Code executes all of onStartup() without waiting for user input in view代码执行所有 onStartup() 无需等待用户在视图中输入
【发布时间】:2014-08-08 19:47:22
【问题描述】:

希望这是有道理的。

我有这样的事情:

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 语句处设置断点,应用程序将不会让用户输入任何内容,因为它卡在加载中(无法在窗口上执行任何操作)。

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

【问题讨论】:

    标签: c# wpf startup app.xaml


    【解决方案1】:

    使用 ShowDialog 而不是 Show。

    相关MSDN链接:

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


    哦,等等,还有一个问题,我可以获得用户输入,但应用程序从未运行/点击 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();
    }
    

    资源:

    WPF showing dialog before main window

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

    【讨论】:

    • 我猜这是wpf,但也许我错了? msdn.microsoft.com/en-us/library/…
    • 不,你是对的。有用。谢谢大声笑哇,我不知道:D
    • 哦,等等,还有一个问题,我可以获得用户输入,但应用程序从未运行/点击 if-else 语句?为什么?
    • 我可以在这里重现它,这似乎与它在 OnStartup 事件中的事实有关,我会稍微挖掘一下。实际上在这里它正在点击 if-else,它只是从未在 this.MainWindow.ShowDialog() 上显示主窗口。
    • 你能详细说明一下吗?感谢您调查它。有人告诉我,可能是 ShowDialog() 在关闭之前不允许任何其他进程运行。这是模态的。
    猜你喜欢
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多