Не открывается новое окно

225
04 мая 2017, 11:18
public partial class App
{
    public App()
    {
        if (Settings.Default.localPort == 0 || Settings.Default.remotePort == 0 ||
            Settings.Default.ip == "no_ip")
        {
            SettingsView settingsView = new SettingsView();
            settingsView.ShowDialog();
            ProgramInfo.Create(Settings.Default.localPort,
                Settings.Default.remotePort, Settings.Default.ip);
        }
        ProgramInfo.Create(Settings.Default.localPort,
                Settings.Default.remotePort, Settings.Default.ip);
        MainView mainView = new MainView();
        mainView.Show();
    }
}

Если значения параметров нулевые - запускается окно настроек, где должен их ввести (сохранения настроек проихводится в SettingsViewModel). Проблема: не запускается окно mainView, хотя конструктор MainViewModel срабатывает, но после просто программа закрывается, никаких ошибок - ничего. Если настройки уже введены (то есть окно настроек не открывается), то mainView открывается и всё работает как надо.

Answer 1

Скорее всего у вас просто сетается главным окно SettingsView и после его закрытия стопается программа.

К слову, прочитайте про Application.Startup.

Попробуйте так:

public partial class App
{
    protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);
        var shouldShowSettings = Settings.Default.localPort == 0
            || Settings.Default.remotePort == 0
            || Settings.Default.ip == "no_ip";
        MainView mainView = new MainView
        {
            ShowInTaskbar = !shouldShowSettings,
            Visibility = shouldShowSettings ? Visibility.Hidden : Visibility.Visible
        };
        mainView.Show();
        if (shouldShowSettings)
        {
            SettingsView settingsView = new SettingsView();
            settingsView.ShowDialog();
            mainView.ShowInTaskbar = true;
            mainView.Visibility = Visibility.Visible;
        }
        ProgramInfo.Create(Settings.Default.localPort,
            Settings.Default.remotePort, Settings.Default.ip);
    }
}
Answer 2

Думаю, проблема в том, что вы пытаетесь открыть диалог в конструкторе App. Приложение будет «запущено» после того, как объект будет сконструирован.

Попробуйте перенести логику с окнами в OnStartup.

И не забудьте переключить ShutdownMode в OnExplicitShutdown. И на закрытии главного окна таки вызвать Shutdown.

READ ALSO
c# Подгрузка dll

c# Подгрузка dll

Добрый день, возникла такая проблема: Я использую dll в проекте C#Но когда я пытаюсь запустить exe, он не запускается ( участок кода, который использует...

221
Библиотека для музыкального плеера [требует правки]

Библиотека для музыкального плеера [требует правки]

Подскажите хорошую библиотеку для создания музыкального плеера и как установить эту библиотеку

202
RSA шифрование на C#

RSA шифрование на C#

Хочу сделать простую шифровку алгоритмом RSA встроенными вNet средствами

721