2009-07-27 9 views
1

J'ai un objet qui a un temporisateur et il déclenche un événement lorsque le temporisateur atteint 5 minutes. Dans ce cas, j'appelle un MessageBox.Show ("Quelque chose") dans mon MainWindow.xaml.cs.WPF Appel MessageBox.Show asynchrone

Le problème est que lorsque j'appelle le MessageBox.Show(), le minuteur s'arrête, jusqu'à ce que l'utilisateur frappe ok. Et j'ai besoin de la minuterie pour continuer même si l'utilisateur n'a pas cliqué ok. Est-ce que c'est une bonne manière élégante de le faire? Voilà ce que j'ai essayé jusqu'à présent (mais ne fonctionne pas):

 private void OnAlert(object sender, MvpEventArgs e) 
     { 
      this.Dispatcher.Invoke(
       System.Windows.Threading.DispatcherPriority.Normal, 
       new Action(
        delegate() 
        { 
         MessageBox.Show("Alert"); 
        } 
      )); 
     } 

Répondre

1

Quel type de minuterie utilisez-vous? Essayez un DispatchTimer. Ça n'a pas beaucoup de sens que ça s'arrête. Vous devrez peut-être être explicite sur les choses (en appelant à nouveau .Start() à partir du gestionnaire terminé, mais le DispatchTimer réinitialise automatiquement).

http://msdn.microsoft.com/en-us/library/system.windows.threading.dispatchertimer.aspx

L'autre chose que vous obtenez avec le DispatchTimer est qu'il est l'événement Tick est évalué automatiquement sur la file d'attente d'expédition, de sorte que vous ne devez pas le mettre explicitement dans la file d'attente d'expédition ... il suffit d'appeler MessageBox .Montre toi. :)

Aussi ... ce que vous faites semble horrible ... J'espère que MessageBox.Show est juste votre preuve de concept et vous allez le remplacer par SomethingBetterAndNotSoAnnoyingAndModal.Show(), mais ce n'est pas utile à votre question, juste une observation.

0

Je ne parlerais pas élégant, mais vous pouvez construire votre propre fenêtre à utiliser comme Messagebox et l'appeler avec « Show » au lieu de "ShowDialog".

Questions connexes