Forum: PC-Programmierung C#: In Thread auf Event reagieren


von bastler (Gast)


Lesenswert?

Hi,

ich eine C# Oberflächenanwendung benutzte ich einen Timer, in dem einige 
Berechnung gamacht werden. Nun möchte ich einen Teil in einem 
zusätzlichen Thread auslagern. In dem Timer von der GUI soll ein Event 
ausgelöst werden. Im Thread soll auf diesens Event ragiert werden. Wie 
würde man sowas in C# realisieren?

von alex (Gast)


Lesenswert?


von Halbglatzenträger (Gast)


Lesenswert?

bastler schrieb:
> Hi,
>
> ich eine C# Oberflächenanwendung benutzte ich einen Timer, in dem einige
> Berechnung gamacht werden. Nun möchte ich einen Teil in einem
> zusätzlichen Thread auslagern.

Vielleicht kannst du ja einen System.Timers.Timer oder 
System.Threading.Timer verwenden. Dann musst du nicht zu Fuß einen 
Thread erzeugen.

> Im Thread soll auf diesens Event ragiert werden. Wie
> würde man sowas in C# realisieren?

Na ja, so wie mit nur einem Thread. Du darfst allerdings nicht auf das 
Userinterface zugreifen, ohne vorher den Kontext zu wechseln (ist unter 
allen Betriebssystemen, Frameworks und Programmiersprachen so, die ich 
kenne).
Hier eine kleine Hilfe für Windows Forms:
https://github.com/domenic/extensions/blob/master/WindowsFormsInvokingExtensions.cs

In WPF-Anwendungen kann man Application.Current.Dispatcher verwenden.

Du solltest natürlich auf mögliche Reentrance (mit Augenmerk auf 
Ausnahmesituationen, z.B. sehr hohe Systembelastung) und evtl. 
notwendige Synchronisation achten (wenn im GUI- und Timer-/Arbeitsthread 
auf die selben Daten zugegriffen wird; es kommt teilweise auch darauf 
an, ob man Invoke oder BeginInvoke benutzt).
Bevor das Fenster geschlossen wird: Timer deaktivieren und warten, bis 
ein evtl. gerade stattfindender "Timer-Durchlauf" beendet ist.

https://msdn.microsoft.com/en-us/magazine/cc164015.aspx

http://www.mycsharp.de/wbb2/thread.php?threadid=33113

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.