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