Comment puis-je forcer ShowDialog
à revenir d'un thread d'arrière-plan?WPF - Force ShowDialog à retourner
J'ai une application WPF construite au-dessus d'une structure C++/CLR qui écoute les messages envoyés par le framework. Un message particulier est si important que j'ai besoin de fermer toutes les fenêtres actuelles. Toutefois, si un modal Dialog
(créé par ShowDialog
à partir de ma fenêtre principale) est actif et en attente de l'entrée de l'utilisateur, la fenêtre ne se ferme pas car il attend ShowDialog
pour retourner. Comment puis-je forcer le modal Dialog
pour fermer et dérouler l'exécution de code?
J'ai essayé de régler le DialogResult
ou d'appeler Close
mais cela ne semble pas fonctionner.
Edit: Le Dialog
est créé par ma fenêtre principale qui attend une valeur de retour, comme ceci: (dans un gestionnaire d'événements clic dans MainWindow
):
Window modalDialog = new Window();
bool ret = (bool)modalDialog.ShowDialog();
if (ret == true)
{
// do stuff
}
else
{
// do some other stuff
}
Lorsque le cadre envoie un message (à venir en sur un fil différent de celui de l'interface utilisateur), j'appelle le MainWindow.Close()
. Le dialogue modal se ferme à ce stade, cependant le code vérifiant la valeur de retour du Dialog
(après ShowDialog
) est toujours dans la pile. D'une certaine manière, cela force la fenêtre principale à ne pas disparaître.
J'ai édité ma question originale pour indiquer que ShowDialog devrait renvoyer une valeur et que la fenêtre parente est censée faire un traitement avec la valeur ... – Hypherion