Frage

Ich habe ein Objekt mit einem Timer und es veranstaltet ein Ereignis, wenn der Timer auf 5 Minuten erreicht. In diesem Fall rufe ich in meinem MainWindow.xaml.cs eine messageBox.show ("etwas") auf.

Das Problem ist, dass der Timer, wenn ich die MessageBox.show () aufrufe, stoppt, bis der Benutzer in Ordnung trifft. Und ich brauche den Timer, um weiterzumachen, auch wenn der Benutzer nicht auf OK geklickt hat. Ist wo eine gute, elegante Art, dies zu tun? Das habe ich bisher versucht (aber nicht funktioniert):

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

Lösung

Welche Art von Timer verwenden Sie? Versuchen Sie es mit einem Versand. Macht nicht viel Sinn, dass es aufhören würde. Möglicherweise müssen Sie sich über Dinge hinweg ausdrücklich ausdrücken (anrufen .Start () erneut vom fertigen Handler, aber die automatischen Auflösungen von DispatchTimer).

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

Die andere Sache, die Sie mit dem DispatchTimer erhalten, ist, dass das Tick -Ereignis automatisch in der Versandwarteschlange bewertet wird, sodass Sie es also nicht explizit in die Versandwarteschlange einfügen müssen ... einfach Call messageBox.show selbst. :)

Auch ... was Sie tun, klingt schrecklich ... Ich hoffe, MessageBox.show ist nur Ihr Beweis für das Konzept und Sie werden es durch etwas ersetzt eine Beobachtung.

Andere Tipps

Sie können das Nachrichtenfeld asynchron mit BeginnInvoke aufrufen. Ich habe das kürzlich gemacht und hier gebloggt: http://www.dmcinfo.com/blog.aspx/articletype/articleview/articleId/163/asynchronous-message-box-in-wpf.aspx. Hoffe das hilft.

Ich würde es nicht elegant nennen, aber Sie könnten Ihr eigenes Fenster erstellen, um sie als MessageBox zu verwenden, und es mit "Show" anstelle von "showDialog" aufrufen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top