Ich habe einige BitmapPictures, bei denen ich auf das DownloadCompleted Event reagieren möchte.
picture.DownloadCompleted += picture_DownloadCompleted;
private void picture_DownloadCompleted(object sender, EventArgs e)
{
BitmapImage picture = sender as BitmapImage;
.
.
.
}
Nun weiß ich durch das Casten von sender, welches Bild gerade fertig geladen worden ist. Allerdings würde ich irgendwie in dem EventArgs noch weitere Infos mit übergeben, die nicht direkt mit dem Bild zusammenhängen.
Nun dachte ich mir, dass ich einfach eine eigene EventArgs Klasse schreibe, die ich von EventArgs ableite und dann meiner Event-Methode übergebe.
picture.DownloadCompleted += picture_DownloadCompleted(picture, new PictureDownloadedArgs(param));
private void picture_DownloadCompleted(object sender, PictureDownloadedArgs e)
{
...
}
Dies klappt allerdings nicht, da er meine Methode nicht von void nach EventHandler casten kann.
Bin ich völlig auf dem falschen Weg oder übersehe ich nur eine "Kleinigkeit"?
Wie kann ich denn sonst in EventArgs Informationen mitgeben, wenn das Event nicht von mir selbst erstellt worden ist?
Vielen Dank!
Aber ich will doch gar nicht einen eigenen Event definieren, sondern einem bestehenden einen Parameter mitgeben.
Im FAQ steht folgender Satz:
Mit eigenen EventArgs (ab .NET 2.0): [Lösung] Problem mit EventHandler
Es ist toll jemand zu sein, der nichts von der persönlichen Meinung Anderer hält. - frisch-live.de
Diesen Thread kenne ich und habe daher auch meine EventArgs Klasse.
public class PictureDownloadedArgs : EventArgs
{
public int Index { get; protected set; }
public PictureDownloadedArgs(int index)
{
Index = index;
}
}
Diese möchte ich aber jetzt mit dem DownloadCompleted Event von BitmapImage benutzen.
Stehe ich so stark auf dem Schlauch?
Äh...
public event EventHandler<PictureDownloadedArgs > DownloadCompleted;
Es ist toll jemand zu sein, der nichts von der persönlichen Meinung Anderer hält. - frisch-live.de
Wenn picture.DownloadCompleted eine Methode mit der Signatur void(object, EventArgs) erfordert, kannst du auch nur eine solche dem delegate hinzufügen.
Um einem Ereignis weitere Daten zu übergeben, erzeugen Sie ein Objekt der Klasse EventArgs oder einer davon abgeleiteten Klasse und übergeben Sie dieses Objekt der ereignisauslösenden Methode. Erzeugen Sie dieses Objekt nicht erst in der ereignisauslösenden Methode.
Genau das versuche ich ja.
public event EventHandler<PictureDownloadedArgs > DownloadCompleted;
Die Klasse BitmapImage stammt aus dem .NET Framework und nicht von mir.
Wenn picture.DownloadCompleted eine Methode mit der Signatur void(object, EventArgs) erfordert, kannst du auch nur eine solche dem delegate hinzufügen.
Und es gibt keine Möglichkeit, einfach EventArgs irgendwelche Parameter mitzugeben?
Die Klasse BitmapImage stammt aus dem .NET Framework und nicht von mir. Dann wohl eine eigene Klasse erstellen und ableiten.
Es ist toll jemand zu sein, der nichts von der persönlichen Meinung Anderer hält. - frisch-live.de
Hallo,
stell die Infos doch einfach ins TAG Element.. für sowas ist es doch gut brauchbar, oder nicht?
lg Lion
Edit: Okay, gibt es nicht, zumindest hab ich es nicht gefunden, sorry
lg Lion
Hallo BillTuer,
das was Du vorhast kann so nicht funktionieren. Schaue Dir doch mal an, was passieren muss, wenn Du Deinen eigens definierten Event feuern möchtest. Normalerweise machst Du dann etwas in folgender Art:
// hier möchtest Du das Event feuern, also
OnMyOwnEventRaise(myEventArgsValue);
// ...
// hier wird die geschützte Methode definiert, die tatsächlich das Event feuert
protected void OnMyOwnEventRaise(int myEventArgsValue)
{
PictureDownloadedArgs pda = null;
if (myOwnEvent != null)
{
pda = new PictureDownloadedArgs(myEventArgsValue);
myOwnEvent(pda);
}
}
Soo, nun stell Dir vor Du verwendest eine schon fertige Klasse, aber möchtest Deine eigene EventArguments verwenden: Wie übergibst Du nun Deine EventArgs der schon fertigen Klasse, die für sich selbst nur die bekannten EventArgs erzeugt und verwendet?
Wenn Du Herr über Deine EventArgs sein möchtest, dann musst Du auch Herr über ein eigenes Event sein, und auch das Event selbst auslösen.
Grüße
Norman-Timo
A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”
Hallo BillTuer,
es ist wie norman_timo sagt. Es geht einfach nicht.
Es ist aber auch nie nötig, bestehenden Events weitere Informationen mitzugeben.
herbivore