CA1009 Ereignishandler korrekt deklarieren

  • C#

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von Fakiz.

    CA1009 Ereignishandler korrekt deklarieren

    Guten Tag,

    ich habe im Moment ein Problem mit dem ich nicht wirklich etwas anfangen kann, meine IDE gibt mir im Moment die oben genannte Warnung aus.

    Meine Event -Klasse sieht so aus:

    VB.NET-Quellcode

    1. public class CustomEventArgs : System.EventArgs
    2. {
    3. //...
    4. }


    Mein Delegat + Event sieht so aus:

    VB.NET-Quellcode

    1. 21. public delegate void ProgressChangedEventHandler(object sender, CustomEventArgs.ProgressChanged e);
    2. 22. public static event ProgressChangedEventHandler OnProgressChanged;



    Und noch einmal die komplette Warnung, die Warnung bezieht sich auf Zeile 22, also meinen Event.

    CA1009 Ereignishandler korrekt deklarieren. Deklarieren Sie den zweiten Parameter von "'ProgressChangedEventHandler'" als EventArgs oder als Instanz eines Typs, durch den EventArgs erweitert wird, mit dem Namen "e".
    Warum verwendest Du denn noch Delegaten? Das geht auch generisch mit EventHandler<T>.
    Auf jeden Fall ist Dein Problem hier, dass Du ​EventArgs angeben musst.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Das war die C&P -Bremse (einen Event geschrieben 2x kopiert), ich verwende noch 2 weiter Events ProcessStart und ProcessEnd. Beide Events halten allerdings keine Daten, siganlisieren also nur das der Process startet bzw. endet.
    Bitte korigier mich falls ich hier falsch liege, aber man sollte doch delegaten verwenden wenn man ein Event feuert das keine Daten bereit hält und EventHandler<T> wenn der Event Daten bereit hält.?
    Kannst dann auch den nutzen mit normalen EventArgs und dann notfalls einfach nichts übergeben (EventArgs.Empty).

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    ​public delegate void ProgressChangedEventHandler(object sender, CustomEventArgs.ProgressChanged e);
    Process.Changed hört sich wie ein Event an. Der zweite Parameter muss aber vom Typ EventArgs sein, also einfach nur CustomEventArgs schreiben. Was war die Idee hinter dem ProcessChanged ?
    Und wie Trade sagte, schenke dir den Delegaten, nimm einfach ​public static event EventHandler<CustomEventArgs> OnProgressChanged;
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais
    Und wie Trade sagte, schenke dir den Delegaten


    Wurde bereits umgesetzt und Code -Analyse gibt auch keine Warnungen mehr aus.
    Offen ist der Thread noch, da ich immer noch etwas verwirrt bin. Wann ich nun welchen EventHandler nutzen soll.

    Laut MSDN

    https://msdn.microsoft.com/en-us/library/edzehd2t(v=vs.110).aspx schrieb:


    The .NET Framework provides the EventHandler and EventHandler<TEventArgs> delegates to support most event scenarios. Use the EventHandler delegate for all events that do not include event data. Use the EventHandler<TEventArgs> delegate for events that include data about the event.


    Im moment habe ich jetzt für die 3 Events einen EventHandler<T> verwenden. Allerdings übergebe ich jetzt auch mit jedem Event Daten, davor nicht.

    PS:

    was war die Idee hinter dem ProcessChanged ?


    Da hast du dich verlesen ;) Progress

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Fakiz“ ()

    das ganze ist recht einfach, letztendlich gibts nur eine frage:

    soll das event informationen transportieren?

    wenn nein:

    C#-Quellcode

    1. public event EventHandler EventEmpty;

    C#-Quellcode

    1. EventEmpty?.Invoke(this, EventArgs.Empty);


    wenn ja:

    C#-Quellcode

    1. public class CustomEventArgs : EventArgs
    2. {
    3. public object Data { get; private set; }
    4. public CustomEventArgs(object data)
    5. {
    6. this.Data = data;
    7. }
    8. }

    C#-Quellcode

    1. public event EventHandler<CustomEventArgs> EventWithArgs;

    C#-Quellcode

    1. EventWithArgs?.Invoke(this, new CustomEventArgs(xxx));


    für allerlei sachen gibts schon eventargs, wenn nichts passendes dabei ist, einfach ne neue klasse machen.