2017-01-06 3 views
1

Ich habe eine MethodeTimer-Methode wird nicht ausgelöst, wenn innerhalb der Methode

public void OnCaptured(CaptureResult captureResult){} 

Innerhalb dieser Methode i den Timer aufrufen möchten genannt, habe ich versucht, den Timer zu aktivieren, aber es wird nicht überhaupt auslösen, ich versuche auch um eine andere Methode zu erstellen und sie innerhalb der oben genannten Methode aufzurufen, um den Timer-Tick aufzurufen und wieder überhaupt nicht zu funktionieren.

hier ist meine Timer-Code:

private void TimeCountDown_Tick(object sender, EventArgs e) 
{ 
    int count = int.Parse(lblCount.Text) -1; 
    InvokeCD(count.ToString()); 
    if (count < 0) { 
     TimeCountDown.Enabled = false; 
     InvokeCD("5"); 
    } 
} 
+4

** ** Welche Timer verwenden Sie? Es gibt mindestens 3 'Timer'-Klassen in .NET Framework und sie sind alle ziemlich unterschiedlich. Ich vermute, dass Sie die [Windows Forms] (https://msdn.microsoft.com/en-us/library/system.windows.forms.timer (v = vs.110) .aspx) verwenden. Wenn das korrekt ist, besteht ein mögliches Problem darin, dass der Timer Ihren Code im UI-Thread ausführen muss. Wenn Sie den UI-Thread in einer anderen Aufgabe gebunden haben, wird der Timer nicht ausgelöst. –

+0

Oh Mann, du hast mich um 30 Sekunden geschlagen: P – MickyD

+0

ja, ich benutze den Timer von Windows Form. Wie werde ich es auslösen? und ja die Form, die ich andere Aufgabe mache. – Denver

Antwort

1

Sie haben Start() Methode aufrufen, um den Timer Funktion zu erhalten. Das Einrichten der Eigenschaft Enabled auf True ist nicht genug.

Dies hat zu arbeiten:

System.Timers.Timer timer = new System.Timers.Timer(1000); //it will run every one second 

public void OnCaptured(CaptureResult captureResult) 
{ 
    timer.Elapsed += TimeCountDown_Tick; 
    timer.Start(); 
} 

private void TimeCountDown_Tick(object sender, System.Timers.ElapsedEventArgs e) 
{ 
    int count = int.Parse(lblCount.Text) -1; 
    InvokeCD(count.ToString()); 
    if (count < 0) { 
     TimeCountDown.Enabled = false; 
     InvokeCD("5"); 
    } 
} 
+0

Ich versuche es bereits und der Timer wird nicht ticken – Denver

+1

OP verwendet den 'Timer' von WinForms nicht' System.Timers' – MickyD

+1

Sie verwenden 'System.Windows.Forms.Timer'. Wenn sie zu 'System.Timers.Timer' wechseln, wird der Timer ausgelöst, aber dann sind sie in der Welt der Verletzungen, die auf Benutzeroberflächenelemente aus einem anderen Thread zugreifen. Und sie können sich nicht von "Invoke" bedienen, da der ganze Grund, dass ihr ursprünglicher Code nicht funktioniert hat, darin besteht, dass sie den UI-Thread beschäftigt halten. –

Verwandte Themen