Ich habe dafür gegoogelt und hier ein paar Threads gelesen, aber ich habe keine einfache Möglichkeit gefunden, eine VB.Net-Anwendung für eine Weile schlafen zu lassen und trotzdem die Anwendung reaktionsfähig zu halten:
%Vor%Gibt es wirklich keine einfache, blockierungsfreie Lösung, um eine VB.Net-Anwendung einige Sekunden warten zu lassen?
Danke.
Ist das WinForms oder WPF?
Wenn es sich um WinForms handelt, können Sie einfach einen Timer anstelle einer while-Schleife verwenden. Dann würde Ihre App immer noch reagieren und Ereignisse auslösen.
In WPF denke ich, dass Sie Ihren eigenen Timer basierend auf dem erstellen müssen DispatchTimer-Klasse .
Rufen Sie ResponsiveSleep auf, um einen bestimmten Codeabschnitt anzuhalten, während die Anwendung relativ reaktionsschnell bleibt. Um die Anwendung reaktionsfähiger zu machen, könnte iHalfSeconds in Zehntel- oder Hundertstelsekunden geändert werden.
Der Timer-Vorschlag ist wirklich der beste Weg, es zu tun. Aber wenn DoEvents
immer noch funktioniert (ich habe VB seit 5.0 nicht mehr gemacht), können Sie das tun:
Dies würde 600 Schläge von jeweils 0,1 Sekunden dauern, mit einem DoEvent zwischen jedem, um aktuelle Ereignisse zu behandeln. Die 0,1 Sekunde sollte ein guter Kompromiss zwischen Reaktionszeit (Ereignisse werden innerhalb von 0,1 Sekunden behandelt) und CPU-Verbrauch (machen Sie dies zu schnell und Ihre App wird beginnen, eine erhebliche Menge an CPU-Zeit verbrauchen, auch während der Wartezeit).
Wirklich, die Lösung ist zweifach: 1.) Benutze einen Timer anstatt zu schlafen, der Schlaf tut wie es heißt, verursacht den Thread zu schlafen. 2.) Verwenden Sie Multithreading und lassen Sie Ihre Bildschirm-Verschrottungsfunktion in einem eigenen Thread laufen, wodurch die Reaktionsfähigkeit Ihrer Anwendung erheblich verbessert wird.
%Vor%Ist eine Thread-Safe-Sleep-Funktion, die den aktuellen Thread für die angegebene Zeit pausiert. Wenn Sie also den Ruhezustand verwenden möchten, können Sie dies in einer Multithreading-Umgebung tun und den Rest Ihrer App wie gewohnt ansprechen lassen schlafe nur einen verzweigten Thread, nicht den Hauptthread.
U machen den UI-Thread, der das Formular in den Ruhezustand versetzt. Wenn Sie Ihre Anwendung reaktionsfähig machen möchten, erstellen Sie zuerst eine Methode, die die Elemente in der Listenansicht hinzufügt, und wenn form lädt, starten Sie diese Methode mit thread. Verwenden Sie nun sleep, um die Listenansicht thread sleep zu machen ..
Tags und Links vb.net sleep nonblocking