C-Sharp - Zyklischer Methodenaufruf in TimerElapsed-Event-Routine bleibt stehen
Hallo,
um die Eingänge (analog & digital) einer USB-Interfacekarte (Velleman K8055) einzulesen habe ich die dafür verfügbare DLL in ein C#-Projekt integriert.
In der Klasse "K8055" habe ich die Verweise auf die externen Funktionen der DLL implementiert. Zusätzlich habe ich diverse Methoden erstellt, die von übergeordnetem Programmcode aufgerufen werden können.
Um die Eingänge nicht "manuell" in übergeordneten Programmcode einlesen zu müssen wollte ich innerhalb der Klasse "K8055" einen Timer erstellen, der mir regelmäßig die Eingänge einliest:
Rufe ich die Methode manuell auf ( InputRefreshTimer_Elapsed(null, null) ), funktioniert sie wunderbar. Wenn Sie aber durch das Elapsed-Event vom Timer aufgerufen wird, bleibt sie an der Zeile mit dem "K8055,ReadAllData()" stehen.
Ich vermute dass es irgendetwas damit zu tun hat, dass hierbei Threads eingesetzt werden, aber ich komme einfach nicht weiter.
Hat jemand eine Idee?
Danke
mabue
um die Eingänge (analog & digital) einer USB-Interfacekarte (Velleman K8055) einzulesen habe ich die dafür verfügbare DLL in ein C#-Projekt integriert.
In der Klasse "K8055" habe ich die Verweise auf die externen Funktionen der DLL implementiert. Zusätzlich habe ich diverse Methoden erstellt, die von übergeordnetem Programmcode aufgerufen werden können.
Um die Eingänge nicht "manuell" in übergeordneten Programmcode einlesen zu müssen wollte ich innerhalb der Klasse "K8055" einen Timer erstellen, der mir regelmäßig die Eingänge einliest:
public void InputRefreshTimer_Elapsed(object sender, ElapsedEventArgs e)
{
this.InputRefreshTimer.Stop();
Console.WriteLine("Start: " + DateTime.Now.ToString());
Console.WriteLine(K8055.ReadAllDigital().ToString());
Console.WriteLine("Ende: " + DateTime.Now.ToString());
this.InputRefreshTimer.Start();
}
Rufe ich die Methode manuell auf ( InputRefreshTimer_Elapsed(null, null) ), funktioniert sie wunderbar. Wenn Sie aber durch das Elapsed-Event vom Timer aufgerufen wird, bleibt sie an der Zeile mit dem "K8055,ReadAllData()" stehen.
Ich vermute dass es irgendetwas damit zu tun hat, dass hierbei Threads eingesetzt werden, aber ich komme einfach nicht weiter.
Hat jemand eine Idee?
Danke
mabue
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 253581
Url: https://administrator.de/forum/c-sharp-zyklischer-methodenaufruf-in-timerelapsed-event-routine-bleibt-stehen-253581.html
Ausgedruckt am: 17.04.2025 um 13:04 Uhr
6 Kommentare
Neuester Kommentar
Verwendest du wirklich die aktuellste DLL des Herstellers?
Der hier hatte nämlich das selbe Problem mit dem Blocking des Threads mit einer älteren Version der DLL:
K8055 call to ReadAllDigital() blocking indefinitely
Grüße Uwe
Der hier hatte nämlich das selbe Problem mit dem Blocking des Threads mit einer älteren Version der DLL:
K8055 call to ReadAllDigital() blocking indefinitely
Grüße Uwe