System.Windows.Application类实例不会显示第二个窗口

时间:2012-10-19 13:46:43

标签: c# .net wpf

我有一个WPF桌面应用程序,我想在启动主窗口之前检查是否可以使用EF连接到我的数据库。所以我尝试连接到数据库,如果发生异常,我只是显示一个窗口,我要求用户输入正确的数据库连接字符串。

用户输入连接字符串后,我重试连接数据库,如果连接,我想启动主窗口,让应用程序启动。

编辑:我改变了我的代码,但仍然无效。我认为这是关闭一个窗口,然后尝试在Application类中显示另一个窗口。 如果未显示ServerConfigurationWin,则可以使用。

然而,当我向用户显示数据库配置窗口后,会发生什么?应用程序调用在App.xaml文件中声明的StartupUri窗口的构造函数,但屏幕上没有显示任何内容。

感谢。

这是我的应用代码:

public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);

        bool success = false;
        while (!success)
        {
            try
            {
                DemirbasContext context = new DemirbasContext();
                DbInitializer initializer = new DbInitializer();
                Database.SetInitializer<DemirbasContext>(initializer);
                context.Database.Initialize(false);
                success = true;
            }
            catch (ProviderIncompatibleException)
            {
                ServerConfigurationWin configurationWin = new ServerConfigurationWin();
                if (!configurationWin.ShowThemAll())
                {
                    // ShowThemAll() returns that operation is canceled.
                    App.Current.Shutdown();
                    return;
                }
                success = false;
            }
        }
    }

    public App()
    {

    }

    void App_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
    {
        // Process unhandled exception do stuff below
        Console.WriteLine("***Message***");
        Console.WriteLine(e.Exception.Message);
        Console.WriteLine("***Stack Trace***");
        Console.WriteLine(e.Exception.StackTrace);
        Console.WriteLine("***Target Site***");
        Console.WriteLine(e.Exception.TargetSite);
        // Prevent default unhandled exception processing
        e.Handled = true;
    }
}

的App.xaml:

<Application x:Class="Demirbas.App"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         DispatcherUnhandledException="App_DispatcherUnhandledException"
         StartupUri="Enterance.xaml">
<Application.Resources>
    <Style TargetType="Button">
        <Setter Property="Height" Value="25" />
        <Setter Property="Width" Value="75" />
        <Setter Property="MinWidth" Value="25" />
        <Setter Property="Margin" Value="5,0" />
        <Setter Property="Padding" Value="0" />
    </Style>
    <Style TargetType="Label">
        <Setter Property="Margin" Value="5,0" />
    </Style>

</Application.Resources>

2 个答案:

答案 0 :(得分:0)

当你的WPF应用程序启动时,你应该尝试这个,找到调用你主窗口的入口点。您可以使用App.Xaml的StartupUri更改默认主窗口。或者您可以像这样覆盖启动调用。

App.Xaml.cs Class

 protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);
        bool condition = false;

        //you logic. / you code.

        if (condition)
            (App.Current.MainWindow = new MyMainWindow ()).Show();
        else
            App.Current.Shutdown();
    }

答案 1 :(得分:0)

您似乎无法显示Application类的第二个窗口。所以我不得不关闭应用程序并重新开始。