WPF ShowDialog немедленно возвращает ноль при втором вызове

Я думаю, что это ошибка в платформе 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();
    }
  }
}
Обновить:

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

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

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

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

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

Ответы на вопрос(2)

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;    
}

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

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

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

Ваш ответ на вопрос