C Sharp: Timer stoppen aus einer anderen Klasse heraus
Hallo,
ich benutze C# mit Visual Studio 2012.
Ich habe folgendes Problem:
Ich habe eine Form (formStart), die ein paar Timer beinhaltet.
Beispiel:
formStart:
private void timer_Zeitanzeige(object sender, EventArgs e)
{
//Zeitanzeige
lablZeit.Text = Convert.ToString(Convert.ToInt32(lablZeit.Text) + 1);
}
Ich habe eine weitere Klasse (classMethoden) aus der heraus ich alle Timer stoppen möchte, die in formStart existieren.
Also in etwa so:
classMethoden:
public void alle_timer_stoppen()
{
formStart.timer_Zeitanzeige.enabled = false;
}
Das funktioniert so aber nicht da ich "formStart.timer_Zeitanzeige" in classMethoden nicht sehe.
Auch wenn ich den timer "public" mache sehe ich ihn in classMethoden nicht (classMethoden.timer_Zeitanzeige gibt es nicht)
Mache ich den timer "static" dann sehe ich "classMethoden.timer_Zeitanzeige" zwar, aber beim Zugriff darauf kommt ein Fehler "für das nicht statische Feld ist ein Objektverweis nötig"
Also meine Frage ist wie ich meine Timer, die in formStart definiert sind, aus classMethoden heraus stoppen kann ?
Danke
ich benutze C# mit Visual Studio 2012.
Ich habe folgendes Problem:
Ich habe eine Form (formStart), die ein paar Timer beinhaltet.
Beispiel:
formStart:
private void timer_Zeitanzeige(object sender, EventArgs e)
{
//Zeitanzeige
lablZeit.Text = Convert.ToString(Convert.ToInt32(lablZeit.Text) + 1);
}
Ich habe eine weitere Klasse (classMethoden) aus der heraus ich alle Timer stoppen möchte, die in formStart existieren.
Also in etwa so:
classMethoden:
public void alle_timer_stoppen()
{
formStart.timer_Zeitanzeige.enabled = false;
}
Das funktioniert so aber nicht da ich "formStart.timer_Zeitanzeige" in classMethoden nicht sehe.
Auch wenn ich den timer "public" mache sehe ich ihn in classMethoden nicht (classMethoden.timer_Zeitanzeige gibt es nicht)
Mache ich den timer "static" dann sehe ich "classMethoden.timer_Zeitanzeige" zwar, aber beim Zugriff darauf kommt ein Fehler "für das nicht statische Feld ist ein Objektverweis nötig"
Also meine Frage ist wie ich meine Timer, die in formStart definiert sind, aus classMethoden heraus stoppen kann ?
Danke
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 258281
Url: https://administrator.de/forum/c-sharp-timer-stoppen-aus-einer-anderen-klasse-heraus-258281.html
Ausgedruckt am: 05.05.2025 um 06:05 Uhr
1 Kommentar
Hallo Heinz2511,
ich würde das mit einem Event in der zweiten Klasse machen, so brauchst du der zweiten Klasse keine Objekte zu übergeben (was du natürlich auch bspw. über den Konstruktor der Klasse machen kannst).
Der Vorteil bei Verwendung eines Events ist, dass du wenn es später mal erforderlich sein sollte, die Klasse aus einem anderen Thread benutzt, du keine Probleme mit CrossThread-Calls bekommst, da die Timer ja im Ursprungs-Thread gestoppt werden
Hier ein Beispiel (Eine Form mit zwei Buttons und einem Label, der eine Button startet den Timer und der andere stoppt den Timer über ein Event welches in der zweiten Klasse getriggert wird)
Visual Studio-Projekt: c-Sharp_stop_timer_by_event_258281.zip
Grüße Uwe
ich würde das mit einem Event in der zweiten Klasse machen, so brauchst du der zweiten Klasse keine Objekte zu übergeben (was du natürlich auch bspw. über den Konstruktor der Klasse machen kannst).
Der Vorteil bei Verwendung eines Events ist, dass du wenn es später mal erforderlich sein sollte, die Klasse aus einem anderen Thread benutzt, du keine Probleme mit CrossThread-Calls bekommst, da die Timer ja im Ursprungs-Thread gestoppt werden
Hier ein Beispiel (Eine Form mit zwei Buttons und einem Label, der eine Button startet den Timer und der andere stoppt den Timer über ein Event welches in der zweiten Klasse getriggert wird)
Visual Studio-Projekt: c-Sharp_stop_timer_by_event_258281.zip
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
// Timer erzeugen
private Timer timer1 = new Timer();
private int counter = 0;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
// Timer starten
timer1.Enabled = true;
}
private void timer1_Tick(object sender, EventArgs e)
{
counter++;
label1.Text = counter.ToString();
}
private void button2_Click(object sender, EventArgs e)
{
// Ein Objekt der anderen Klasse erzeugen
classMethoden test = new classMethoden();
// Das Event abbonieren
test.stopTimerEvent += new EventHandler(stopMyTimer);
// Methode aufrufen die anschließend das Event triggert
test.doSomething();
}
//Eventhandler der den Timer stoppt
private void stopMyTimer(object sender,EventArgs e)
{
timer1.Enabled = false;
}
private void Form1_Load(object sender, EventArgs e)
{
timer1.Enabled = false;
timer1.Tick += new EventHandler(timer1_Tick);
timer1.Interval = 100;
}
}
}
public class classMethoden
{
public event EventHandler stopTimerEvent;
public void doSomething()
{
// Hier was machen , am Ende wird die Event-Procedure getriggert
execute_event();
}
public void execute_event()
{
// Event triggern
if (stopTimerEvent != null)
stopTimerEvent(this, new EventArgs());
}
}