Ich habe ein TextBox
mit einem TextChanged
Ereignis verdrahtet. Am Ende wird eine Abfrage an eine SQL-Datenbank gestellt, daher möchte ich die Anzahl der Abfragen begrenzen.
Ich möchte nur die Abfrage machen, wenn der Benutzer keinen Schlüssel in etwa 300 Millisekunden gedrückt hat. Wenn aus irgendeinem Grund die vorherige Abfrage noch ausgeführt wird, müsste ich dies abbrechen und dann eine neue Abfrage ausgeben.
Verwenden Sie das Reactive Framework, um eine Folge von Ereignissen auszulösen. Ich bin nicht sicher, genau wie das funktionieren würde, aber Sie können es hier nachlesen ( Reaktive Erweiterungen für .NET ) und sehen, ob es Ihre Bedürfnisse erfüllt. Es gibt auch eine Reihe von Beispielen: Beispiele . Das "Throttling" Beispiel könnte das sein wonach Sie suchen.
Dank @ Brians Idee und dieser Antwort habe ich meine eigene Version eines Timers entwickelt Problem. Das hat gut für mich funktioniert. Ich hoffe, es hilft auch den anderen:
%Vor%1) Erstellen Sie einen Timer.
2) Erstellen Sie einen Handler für das Tick-Ereignis Ihres Timers. Überprüfen Sie bei jedem Häkchen, ob genügend Leerlaufzeit verstrichen ist. Wenn dies der Fall ist, STOPPEN Sie den Timer und führen Sie die Abfrage aus.
3) Immer wenn ein Tastendruck in dieser Textbox auftritt, NEUSTACHTEN Sie den Timer.
Fügen Sie einen zweiten actionlistener hinzu, der immer aufgerufen wird, wenn der Benutzer eine beliebige Taste drückt, und wenn er aufgerufen wird, speichert er die aktuelle Zeit in einer globalen Variablen. Wann immer Ihr TextChanged-Ereignis aufgerufen wird, überprüft es den Zeitunterschied zwischen der globalen Variablen und der aktuellen Zeit.
Wenn der Unterschied weniger als 300 Millisekunden beträgt, starten Sie einen Zeitgeber, um die Abfrage nach 300 Millisekunden auszuführen. Wenn der Benutzer dann eine andere Taste drückt, setzt er den Timer zuerst zurück.
Tags und Links c# winforms textbox textchanged