Limitações do evento Application.Startup (bug?)
Diz, eu posso usarStartup
evento para muitas coisas, como inicialização, criação de vários formulários, blablabla.
No entanto, tente criar um novo aplicativo WPF e adicione este manipulador de eventos:
private void App_Startup(object sender, StartupEventArgs e)
{
Window window = new Window();
}
E depois de fechar a janela principal, seu aplicativo será desligado na memória. Pausar a execução no VS nesse momento cairá feiobatida janela da pilha de chamadas com muitas chamadas em algum lugar longe do meu código-fonte.
Alguma ideia?
P.S .: Preciso instanciar todas as minhas janelas para fins de configuração de autoaprendizagem uma vez. Devo usar algum outro lugar?
Deixe-me dar um exemplo melhor (o exemplo acima é bom para reproduzir o problema, parece difícil entender o que estou realmente fazendo). eu removoStartupUri
e depois:
private void App_Startup(object sender, StartupEventArgs e)
{
// un-comment this line to reproduce the problem:
// Window window = new Window();
// actual implementation will be
// Window1 window1 = new Window1();
// Window2 window2 = new Window2();
// Window3 window3 = new Window3();
// Window4 window4 = new Window4();
// ...
// start main window as usually
MainWindow mainWindow = new MainWindow();
mainWindow.Show();
}
E por que preciso de instâncias do windows (window1, ..2, ..3, ...)? Porque o conteúdo deles será inspecionado para criar uma lista de controles para os quais desejo salvar a configuração. Algumas dessas janelas serãoNunca ser mostrado ao usuário (por exemplo, se ele não for administrador), alguns deles são pop-ups, alguns são editores, etc. Portanto, não quero exibi-los. Porém, em qualquer inicialização do aplicativo, a configuração deve ser criada e salva. E agora estou procurando o lugar para fazê-lo.
Surpreendentemente, usando evento dedicadoStartup
parece ter algumproblemas com a criação de várias janelas, masnão exibindo eles. A questão é por que e como resolvê-lo.
Testando um pouco mais. Experimente este código e me explique por que o aplicativo é fechado sem mostrarqualquer janela?
private void App_Startup(object sender, StartupEventArgs e)
{
Window window = new Window();
window.Close(); // closing without opening window
MainWindow mainWindow = new MainWindow();
mainWindow.Show();
//mainWindow = new MainWindow(); // can be un-commented, for absolutely no effect
mainWindow.Show();
mainWindow.Show();
mainWindow.Show();
mainWindow.Show(); // you will not see mainWindow at all, all Show doing nothing
}
Mais perguntas. O que eu faço?
Algo que funciona, mas cheira:
private void App_Startup(object sender, StartupEventArgs e)
{
Window window = new Window();
MainWindow mainWindow = new MainWindow();
mainWindow.ShowDialog();
Shutdown();
}
Observe, chamandoShowDialog
(que fará o manipulador de eventos aguardar o fechamento da janela) e chamarShutdown
logo depois.
Ainda não está claro qual é o problema noStartup
manipulador de eventos para criar instâncias de algumas janelas. Alguma ideia?