2009-06-17 11 views
8

Je me bats pour trouver un moyen de créer la fonctionnalité des formulaires que je veux en C#.Fermer boîte de dialogue modale du filet extérieur - C#

Fondamentalement, je veux avoir une boîte de dialogue modale qui a un délai d'attente spécifié. Il semble que cela devrait être facile à faire, mais je n'arrive pas à le faire fonctionner.

Une fois que j'appelle this.ShowDialog(parent), le flux de programme s'arrête, et je n'ai aucun moyen de fermer la boîte de dialogue sans que l'utilisateur clique d'abord sur un bouton.

J'ai essayé de créer un nouveau fil en utilisant la classe BackgroundWorker, mais je ne peux pas le faire pour fermer la boîte de dialogue sur un thread différent.

Est-ce que je manque quelque chose d'évident ici?

Merci pour toute idée que vous pouvez fournir.

Répondre

11

Utilisez un System.Windows.Forms.Timer. Définissez sa propriété Interval comme délai d'attente et son gestionnaire d'événements Tick pour fermer la boîte de dialogue. La minuterie s'exécute sur le thread d'interface utilisateur de sorte qu'il est sûr de fermer le formulaire à partir du gestionnaire d'événement tick.

1

vous pouvez Invoke la fin de votre fil d'arrière-plan

11

Vous devrez appeler la méthode Close sur le fil qui a créé la forme:

theDialogForm.BeginInvoke(new MethodInvoker(Close)); 
3

Si vous voulez juste un dialogue modal alors j'ai trouvé que c'était la meilleure solution de loin: http://www.codeproject.com/KB/miscctrl/CsMsgBoxTimeOut.aspx (lire la section des commentaires pour une petite modification).

Si vous souhaitez afficher votre propre formulaire de façon modale, la solution de adrianbanks est le meilleur.

Questions connexes