Ist Application.DoEvents () nur für WinForms?

7

Ist Application.DoEvents() nur für Formulare?

Ich dachte, dass dieser Befehl verwendet wurde, um sicherzustellen, dass alle Befehle zuvor verarbeitet werden, aber jetzt nach dem Lesen von die Dokumentation , da bin ich mir nicht mehr sicher.

    
Jaime Oro 12.02.2011, 11:09
quelle

4 Antworten

15

Ja, es ist wirklich auf Windows Forms ausgerichtet. Meiner Meinung nach sollte dies jedoch möglichst vermieden werden.

Es wird normalerweise von Entwicklern als Hack verwendet, die sich nicht damit belästigen lassen wollen, lange laufende Operationen an einem anderen Thread zu betreiben ... aber das bedeutet, dass sie Re-Entrance-Probleme einführen, die sehr schwer zu verfolgen sind Sie können den UI-Thread auch für einige Zeit blockieren (und wenn das etwa eine Dateioperation enthält, können Sie nicht wirklich vorhersagen, ob der Vorgang schnell genug ausgeführt wird, um keinen sichtbaren Effekt für den Benutzer zu haben).

    
Jon Skeet 12.02.2011, 11:12
quelle
3

Ohne WinForms gibt es keine standardmäßige Ereigniswarteschlange. (Nun, es gibt eine Ereigniswarteschlange in WPF, aber dies ist nur ein anderes Framework).

    
Vlad 12.02.2011 11:12
quelle
3

Wenn Sie versuchen, außerhalb Ihrer Anwendung etwas zu erreichen (z. B. eine Datei, die in einem bestimmten Verzeichnis abgelegt werden soll), wäre eine mögliche Abhilfe die Klasse Timer von System.Timers Namespace.

Ein Beispiel (basierend auf MSDN):

%Vor%

Weitere Informationen auf MSDN: Ссылка

    
show 08.11.2012 09:40
quelle
2

Ja, das gilt nur für Windows Forms. In einer Konsole oder einer ASP.NET-Anwendung ist dies nicht sinnvoll, da keine Nachrichtenschleife vorhanden ist. Es ist möglich, dies in WPF mit dem Dispatcher zu tun, wie in hier . Wie auch immer, ich würde nicht empfehlen, DoEvents zu verwenden, außer vielleicht in einer schnellen und schmutzigen Anwendung, aus den Gründen, die von Jon erklärt wurden.

    
Thomas Levesque 12.02.2011 11:17
quelle

Tags und Links