Entwickler-Ecke
Basistechnologien - Eventhandler mehrere Klassen frage
Pete550 - Sa 21.08.10 13:53
Titel: Eventhandler mehrere Klassen frage
Hallo Zusammen.
Ich habe erst vor kurzen mit Csharp angefangen und habe ein Problem bei dem ich nicht weiterkomme.
CSharp2010
Vereinfacht:
Gegeben ist ein Form mit einem (eigentlich mehreren) Label.
Dieses Label soll einen Eventhandler bekommen.
Aus sämtlichen Klassen / Threads im selben Namespace möchte ich ein Event auf dieses Label feuern können.
Mein Code funktioniert bestens solange ich alle Klassen / Funktionen direkt von Form 1 aufrufe.
Wenn ich Verschachtelt von class1 auf class2 aufrufe funktioniert das Event in class2 nicht mehr.
woran liegt das? was ist mein Fehler?
vielen Dank und viele Grüße.
Hier ist mein bisheriger stark vereinfachter Code:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81:
| public partial class Form1 : Form { Class1 class1 = new Class1(); Class2 class2 = new Class2(); public Form1() { InitializeComponent(); class1.ProgressChanged += new EventHandler<ProgressChangedArgs>(OnWorkerProgressChanged); class2.ProgressChanged += new EventHandler<ProgressChangedArgs>(OnWorkerProgressChanged); }
private void OnWorkerProgressChanged(object sender, ProgressChangedArgs e) { if (this.InvokeRequired) { this.BeginInvoke((MethodInvoker)delegate { OnWorkerProgressChanged(sender, e); }); return; } this.label1.Text = e.Progress; }
private void button_read_Click(object sender, EventArgs e) { t1 = new Thread(thread1); t1.IsBackground = true; t1.Start(); } public void thread1() { class1.C1Test(); }
public class ProgressChangedArgs : EventArgs { public string Progress { get; private set; }
public ProgressChangedArgs(string progress) { Progress = progress; } }
class Class1 { Class2 class2 = new Class2(); public event EventHandler<ProgressChangedArgs> ProgressChanged; protected void OnProgressChanged(ProgressChangedArgs e) { if (ProgressChanged != null) { ProgressChanged(this, e); } } public void C1Test() { OnProgressChanged(new ProgressChangedArgs("test von C1")); class2.C2Test(); } }
class Class2 { public event EventHandler<ProgressChangedArgs> ProgressChanged; protected void OnProgressChanged(ProgressChangedArgs e) { if (ProgressChanged != null) { ProgressChanged(this, e); } } public void C2Test() { OnProgressChanged(new ProgressChangedArgs("test von C2")); } } |
Kha - Sa 21.08.10 14:07
:welcome:
Du erstellst zweimal eine Class2-Instanz, einmal in Form1 und einmal in Class1. Aber nur bei der ersten Instanz abonnierst du das Event mit +=. Das musst du auch im Class1-Konstruktor machen und im angehängten Eventhandler dann OnProgressChanged zur Weitergabe aufrufen.
PS: Merkwürdige Einrückung hast du da :) .
Pete550 - Sa 21.08.10 15:20
huhu Kha
habe es entsprechend umgesetzt getestet und es funktioniert :D
Vielen Dank für deine Hilfe
Yogu - Sa 21.08.10 15:58
Bitte markiere deine Frage als erledigt, damit Hilfestellende gleich sehen, dass sie das Thema nicht durchlesen müssen. Klicke dazu einfach auf

oberhalb des ersten Postings. Danke! :)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!