2016-07-11 5 views
-1

Ich wusste nicht wirklich, wie man den Titel, aber ich habe einen System-Timer auf einen anderen Thread in einer Klasse erstellt, die, kurz gesagt, Informationen über TCP IP sendet. Ich trenne dann den Client, ohne den Timer zu stoppen, so dass es immer noch läuft, aber ich habe es schon verlassen, so dass ich die Ausnahme "System.ObjectDisposedException" 10 Mal pro Sekunde bekomme.C# Versucht, den Timer, der beendet wurde zu entsorgen - System.ObjectDisposedException

Ich verstehe, warum dies geschieht, aber ich weiß nicht, wie man es entsorgen, weil es nicht existiert, so kann ich nicht einfach Timer.Stop(); sagen. Ich habe versucht zu recherchieren und zu finden, dass ich einen Aufruf oder etwas verwenden sollte, aber das könnte nicht funktionieren. Ich habe einen Beispielcode unten nur als Referenz.

static class Program 
{ 
    [STAThread] 
    static void Main() 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 

     new Thread(() => 
     { 
      test RunTimer = new test(); 
      RunTimer.StartTimer(); 

     }).Start(); 

    Application.Run(); 
    } 
} 

class test 
{ 
    public static System.Timers.Timer TimerVideo = new System.Timers.Timer(); 

    public void StartTimer() 
    { 
     TimerVideo.Interval = 100; 
     TimerVideo.Elapsed += (o, e) => Console.WriteLine("Running"); 
     TimerVideo.Start(); 
    } 
} 

Antwort

0

Nehmen static weg von TimerVideo. Jetzt "besitzt" jede Instanz von test ihre eigene Timer.

Da dann test besitzt, dass die verfügbare Ressource, testIDisposable implementieren machen und sicherzustellen, dass, wenn test die Timer angeordnet ist auch angeordnet ist.

+0

ok ich nahm statische aus, aber ich habe auch eine Funktion in der Klasse, die es ordnungsgemäß stoppt, während ich noch verbunden bin, die nur Timer.Stop ist, aber seit seiner statischen kann ich jetzt nicht zugreifen, wie würde ich den Timer aus dem gleichen stoppen Klasse? –

+0

oh warte nicht ich bin ein Idiot ich mache nur diese Funktion öffentlich, perfekt werde ich das jetzt versuchen, danke :) –

+0

Ich versuchte IDispoable zu implementieren, aber es hat nichts getan –

Verwandte Themen