URL: https://www.overclockers.at/coding-stuff/delegates_events_wie_ausloesen_183375/page_1 - zur Vollversion wechseln!
Hi,
Hab ein Problem mit Delegates/Events, bin jetz schon länger am C# Programmieren doch erst jetz brauch ich das zeug unbedingt. Hab bis jetzt immer ein wenig herum-gearbeitet.
Im Prinzip isses so: Ich habe eine Klasse welche mit Webabfragen ausführt, die Abfrage wird als Thread gestartet und soll ein Event in der aufrufenen Klasse auslösen wenn die Abfrage Beendet ist.
Dieses soll mit mehreren Klasse funktionieren, also es existieren mehrere Abfrageklassen, die Alle das gleiche Event (Aktualisierung) in der Hauptklasse auslösen.
In Foren finde ich immer einen komplett anderen Aufbau mit Events/Delegates (1 Publisher, 2 Subscirber), bei mir sollten es x Publisher und nur ein Subscriber sein, oder ich hab das ganze einfach falsch verstadnen.
Da ich das ganze nicht in meinem großen Programm testen will, hab ich mir ein kleines Beispielprog. geschrieben, welches Analog zu meinem großen funktioniert - zumindest vom Event/Delegate Teil.
Hier mein Test-Code:
namespace delegateTest
{
public delegate void myTestDelegate();
public partial class Form_Entry : Form
{
public event myTestDelegate myEvent;
public Form_Entry()
{
InitializeComponent();
myEvent += new myTestDelegate(print);
RequestClass1 MyClass = new RequestClass1();
RequestClass2 MyClass = new RequestClass2();
}
private void print()
{
textBox_Out.AppendText("Event Fired !!!" + Environment.NewLine);
}
}
class RequestClass1
{
public myClass()
{
mytestfunction();
}
public void mytestfunction()
{
// invoke the myEvent event in Form_Entry
}
}
class RequestClass2
{
public myClass()
{
mytestfunction();
}
public void mytestfunction()
{
// invoke the myEvent event in Form_Entry
}
}
}
Hier sollen einfach meine beiden Request-Klassen in der Form_Entry das Event "myEvent" auslösen.
Wie mach ich das ?
Zitat von Vanongart[...]
Im Prinzip isses so: Ich habe eine Klasse welche mit Webabfragen ausführt, die Abfrage wird als Thread gestartet und soll ein Event in der aufrufenen Klasse auslösen wenn die Abfrage Beendet ist.
[...]
Code:public event EventHandler FinishedRequest;
Code:this.FinishedRequest(..., ...);
Code:class1 sample = new class1(); sample.FinishedRequest += new EventHandler(OnFinishedRequest);
Code:private void OnFinishedRequest(object sender, EventArgs e) { ... }
3mind hat recht mit den Events, da unterliegst du einem Denkfehler.
Warum rufst du nicht einfach in deinen Abfrageklassen eine Methode von Form_Entry auf?
Mit Form_Entry.Invoke sollte das machbar sein, wenn das Abfrageobjekt in einem eigenen Thread läuft.
mhm Thx erstmal für die Antworten.
Ah - vielen Dank, jetz versteh ich meinen Fehler auch, hab von der falschen Seite gedacht ...
Bei deiner Lösung, Triple-X müsste ich der Abfrageklasse das Form_Entry Objekt (sich selber quasi) mitübergeben, damit ich eine Methode der Form aufrufen kann ?
Und dann halt die Überprüfung auf aufrufenden Thread mit:
If (this.textbox.InvokeReqired)
.....
EDIT: Die Lösung mit den Delegates funktioniert prächtig ^^, thx, hat mir mehr geholfen als einige tutorials und co
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025