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:
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")); } } |