Вопрос по showdialog, null, wpf, return – WPF ShowDialog немедленно возвращает ноль при втором вызове

15

Я думаю, что это ошибка в платформе WPF, не вдаваясь в глубины моей программы, и почему я делаю то, что делаю, я написал простое тестовое приложение, чтобы доказать свою теорию.

Можно ли подтвердить эту проблему? Каковы возможные обходные пути для серии диалогов, которые должны быть выполнены до помещения приложения в цикл выполнения?

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Windows;

namespace ShowDialogWindow
{
  /// <summary>
  /// Interaction logic for App.xaml
  /// </summary>
  public partial class App : Application
  {
    protected override void OnStartup(StartupEventArgs e)
    {
       Window testWindow = new Window();
       testWindow.ShowDialog();
       testWindow.Close();
       // THE CODE BELOW WILL NOT SHOW THE NEXT WINDOW
       Window testWindow2 = new Window();
       testWindow2.ShowDialog();
       testWindow2.Close();
    }
  }
}
Update:

Конечно, я могу изменить свой дизайн, чтобы приспособиться к этому поведению. Однако то, что я пытался сделать, было действительно просто.

Я получил мойMyApplication отApplication, НаMain()Я инициирую серию проверок запуска, например, информацию о лицензии, заставку, проверки подключения и конфигурации и т. Д. Когда мне все ясно, я звонюMyApplicatiom.Run(MyMainForm).

Этот дизайн основан на обычном приложении Windows, которое работает без проблем.

Большое спасибо за вашу помощь, и я буду помнить, что вы не можете позвонитьShowDialog() доapplication.Run() поскольку это просто инициализирует отключение. Однако я бы подумал, что последовательность выключения должна начинаться только послеApp.Run() инструкция.

Пожалуйста, поправьте меня, если я неправильно это понимаю.

Ваш Ответ

2   ответа
27

ShutdownMode изApplication являетсяOnLastWindowClosedпоэтому, как только первое окно закроется, ваше приложение начнет закрываться! Изменить наOnExplicitShutdown и это будет работать, но вам придется управлять выключением.

Я думаю, что вам, вероятно, просто нужно переосмыслить то, чего вы на самом деле пытаетесь достичь. Зачем вам отображать два последующих диалоговых окна во время запуска вашего приложения?

Объяснение для понижения голоса было бы очень ценно. Есть ли что-то, что мне нужно улучшить в этом ответе?
4

public App()
{
    // Preserve and temporarily switch shutdown mode
    var oldShutdownMode = ShutdownMode;
    ShutdownMode = ShutdownMode.OnExplicitShutdown;

    var dialog = new Window();
    var result = dialog.ShowDialog();
    dialog = new Window();
    result = dialog.ShowDialog(); // This will show!

    // Reset shutdown mode to original value
    ShutdownMode = oldShutdownMode;    
}

Похожие вопросы