2017-05-11 4 views
-1

Ich arbeite derzeit eine Funktion, die Text sammelt und es zu einem vollständigen Satz zusammenfügt. Sobald der Satz vollständig ist, möchte ich den formatierten Text an eine vorbereitete Funktion senden.Timer wird nicht zurückgesetzt [Xamarin bildet iOS] C#

Was ich getan habe, um dies zu erreichen, ist einen Timer zu erstellen, also wenn etwas nicht innerhalb von 5 Sekunden gesendet wird, möchte ich das Ereignis mit dem gesammelten Text auslösen.

Mit meinem aktuellen Code wird der Timer jedoch nie zurückgesetzt und das Ereignis wird nach 5 Sekunden ausgelöst, obwohl während dieser Zeit Text gesendet wurde, der den Timer zurücksetzen würde.

Das ist also die Funktion, die aufgerufen wird, wenn neuer Text eingegeben wird:

string result = ""; 
Timer time; 
public void beginTimer(string text) 
{ 
    result = result + " " + text; 
    time.Stop(); 
    time = new Timer(5000); 
    time.Enabled = true; 
    time.AutoReset = false; 
    time.Start(); 
    time.Elapsed += new ElapsedEventHandler(timer_Elapsed); 
} 

Und wenn das Ereignis ausgelöst ich den vollständigen Text meiner anderen Funktion senden:

public event EventHandler<EventArgsSentence> textChanged; 

private async void timer_Elapsed(object sender, ElapsedEventArgs e) 
{ 
    time = (Timer)sender; 
    time.Stop(); 
    time.Enabled = false; 

    textChanged.Invoke(this, new EventArgsSentence(result)); 
    result = ""; 
} 

Aber mit diesem Code Der Timer wird nicht zurückgesetzt und das Ereignis wird immer nach 5 Sekunden ausgelöst, obwohl beginTimer während dieser Zeitperiode aufgerufen wird.

+0

Einfach nur neugierig, warum Sie .. mehrmals ein neues Timer-Objekt erstellen nicht da .. – MethodMan

+0

die Post aktualisiert zu machen scheint (gleiches Problem bleibt jedoch) –

Antwort

0

Versuchen Sie, diese für Stoppuhr

time.Invalidate(); 
time.Dispose(); 
time = null; 
+0

Wenn Ich fügte hinzu, dass es funktioniert hat! Vielen Dank. I neu positioniert auch den Code ein wenig, damit ich mit diesem gestartet: 'wenn \t \t \t \t \t \t \t { \t \t \t \t \t \t \t \t time.Stop(); (time! = Null) \t \t \t \t \t \t \t \t time.Dispose(); \t \t \t \t \t \t \t \t Zeit = null; \t \t \t \t \t \t \t} ' –

+0

diesen Code funktioniert? – KKRocks

+0

Ja. Wird in einer Minute upvote, wenn es mich lässt –

Verwandte Themen