Winforms entspricht Javascript setTimeout

7

Gibt es eine einfache Lösung / Idee / Strategie, um eine setTimeout-äquivalente Funktion in einer WinForms-App zu erstellen? Ich bin hauptsächlich ein Webentwickler, bin mir aber nicht sicher, wie ich das in einer WinForms App angehen würde. Grundsätzlich habe ich ein Textfeld, und nach jedem Tastendruck möchte ich eine Aufgabe ausführen, um eine Liste zu füllen (wie ein Auto-Vervollständigen-Ding), aber in der Lage sein, (z. B. clearTimeout) abzubrechen, wenn der Benutzer Zeichen eingibt ...

Meine einzige Vermutung ist vielleicht, einen BackGroundWorker zu verwenden und ihn anfangs schlafen zu lassen, und während er schläft, könnte er abgebrochen werden, wenn der Benutzer die Schlüsseleingabe beendet und der Schlafzeitraum endet, geht er und führt die Aufgabe usw. aus / p>

(es ist mir egal, ob ein Beispiel C # oder Vb.Net ist)

    
davidsleeps 02.12.2010, 02:31
quelle

6 Antworten

11
___ answer12802622 ___
%Vor%     
___ antwort4331253 ___

Sie können einen System.Timers.Timer verwenden: Setzen Sie AutoReset auf false und verwende Start / Stop-Methoden und erstelle einen Handler für das Elapsed-Ereignis.

    
___ qstnhdr ___ Winforms entspricht Javascript setTimeout ___ qstntxt ___

Gibt es eine einfache Lösung / Idee / Strategie, um eine setTimeout-äquivalente Funktion in einer WinForms-App zu erstellen? Ich bin hauptsächlich ein Webentwickler, bin mir aber nicht sicher, wie ich das in einer WinForms App angehen würde. Grundsätzlich habe ich ein Textfeld, und nach jedem Tastendruck möchte ich eine Aufgabe ausführen, um eine Liste zu füllen (wie ein Auto-Vervollständigen-Ding), aber in der Lage sein, (z. B. clearTimeout) abzubrechen, wenn der Benutzer Zeichen eingibt ...

Meine einzige Vermutung ist vielleicht, einen BackGroundWorker zu verwenden und ihn anfangs schlafen zu lassen, und während er schläft, könnte er abgebrochen werden, wenn der Benutzer die Schlüsseleingabe beendet und der Schlafzeitraum endet, geht er und führt die Aufgabe usw. aus / p>

(es ist mir egal, ob ein Beispiel C # oder Vb.Net ist)

    
___ answer26405557 ___

Ich weiß, dass dies eine alte Frage ist, aber eine alternative Lösung wäre, %code% zu verwenden.

Thread.Sleep vs Task.Delay?

oder es gibt %code%

Ссылка

    
___ tag123net ___ Das .NET-Framework ist ein Software-Framework, das hauptsächlich für das Microsoft Windows-Betriebssystem entwickelt wurde. Es enthält eine Implementierung der Basisklassenbibliothek, Common Language Runtime (allgemein als CLR bezeichnet), Common Type System (allgemein als CTS bezeichnet) und Dynamic Language Runtime. Es unterstützt viele Programmiersprachen, einschließlich C #, VB.NET, F # und C ++ / CLI. NICHT für Fragen zu .NET Core verwenden. ___ answer40036855 ___
%Vor%     
___ tag123javascript ___ JavaScript (nicht zu verwechseln mit Java) ist eine dynamische Sprache mit mehreren Paradigmen auf hoher Ebene, die sowohl für das clientseitige als auch für das serverseitige Scripting verwendet wird. Verwenden Sie dieses Tag für Fragen zu ECMAScript und seinen verschiedenen Dialekten / Implementierungen (außer ActionScript und Google-Apps-Script). ___ tag123winforms ___ WinForms ist der informelle Name für Windows Forms, eine GUI-Klassenbibliothek in Microsoft .NET Framework und Mono. Fragen in diesem Tag sollten auch mit dem Zielframework ([.net] oder [mono]) versehen und normalerweise mit einem Programmiersprachen-Tag versehen werden. ___ answer44519487 ___

Dies ist mein Weg, benutze C # 7.0 Syntax-Funktion. Einige unterscheiden sich mit js, wenn Timeout-Aktion ausgeführt wird und dann nicht gelöscht werden kann.

%Vor%     
___ tag123settimeout ___ setTimeout ist eine globale JavaScript-Methode, mit der eine bestimmte Funktion oder ein Code nach einer bestimmten Verzögerung ausgeführt wird. ___ answer40037360 ___

Ich würde empfehlen, reaktive Programmierung dafür zu verwenden. Siehe Ссылка für die Reactive Extensions für .NET und Ссылка für die allgemeinen Informationen über Reaktive Programmierung.

Ich fürchte, ich kenne nur die reaktive JavaScript-Bibliothek, daher kann ich Ihnen kein C-Sharp-Beispiel geben, aber in JavaScript würde es etwa so funktionieren:

%Vor%

Mithilfe eines solchen Setups können Sie Operatoren verketten, um alle Arten von Ereignissen von einer Quelle zu einem Abonnenten zuzuordnen und zusammenzuführen. Das einfache obige Beispiel reagiert auf ein Ereignis, beispielsweise keyUp, und wartet, bis 300 ms kein neues keyUp mehr vorhanden ist, und ruft den eventHandler auf, jedoch nur, wenn der neue Wert (nach 300 ms) vom letzten ausgegebenen Wert abweicht / p>     

___
Serguei 02.12.2010, 02:55
quelle
17

Ich weiß, dass dies eine alte Frage ist, aber eine alternative Lösung wäre, Task.Delay(delay).ContinueWith((task) => { /* Code */ }); zu verwenden.

Thread.Sleep vs Task.Delay?

oder es gibt await Task.Delay(delay);

Ссылка

    
Robert 16.10.2014 13:21
quelle
11
%Vor%     
Rob Hardy 09.10.2012 14:45
quelle
0
%Vor%     
Ahmet Goktas 14.10.2016 06:58
quelle
0

Ich würde empfehlen, reaktive Programmierung dafür zu verwenden. Siehe Ссылка für die Reactive Extensions für .NET und Ссылка für die allgemeinen Informationen über Reaktive Programmierung.

Ich fürchte, ich kenne nur die reaktive JavaScript-Bibliothek, daher kann ich Ihnen kein C-Sharp-Beispiel geben, aber in JavaScript würde es etwa so funktionieren:

%Vor%

Mithilfe eines solchen Setups können Sie Operatoren verketten, um alle Arten von Ereignissen von einer Quelle zu einem Abonnenten zuzuordnen und zusammenzuführen. Das einfache obige Beispiel reagiert auf ein Ereignis, beispielsweise keyUp, und wartet, bis 300 ms kein neues keyUp mehr vorhanden ist, und ruft den eventHandler auf, jedoch nur, wenn der neue Wert (nach 300 ms) vom letzten ausgegebenen Wert abweicht / p>     

Robba 14.10.2016 07:26
quelle
0

Dies ist mein Weg, benutze C # 7.0 Syntax-Funktion. Einige unterscheiden sich mit js, wenn Timeout-Aktion ausgeführt wird und dann nicht gelöscht werden kann.

%Vor%     
IlPADlI 13.06.2017 10:54
quelle