meine cusom EventArgs verwenden wie:EventHandler <TEventArgs> Gewindesicherheit in C#?
public event EventHandler<MyEventArgs> SampleEvent;
von msdn zB:
public class HasEvent
{
// Declare an event of delegate type EventHandler of
// MyEventArgs.
public event EventHandler<MyEventArgs> SampleEvent;
public void DemoEvent(string val)
{
// Copy to a temporary variable to be thread-safe.
EventHandler<MyEventArgs> temp = SampleEvent;
if (temp != null)
temp(this, new MyEventArgs(val));
}
}
Ich habe Frage:
1) an der markierten Code suchen:
ich nicht einen Grund, warum es zu einem anderen param (in Bezug auf Themen)
kopiert werden sollte, da wir die event
keyowrd haben, kann niemand seine Aufrufliste (kein Außenseiter Code zur Klasse ich meine) berühren
2) Wenn im nicht irre, die DemoEvent
Funktion sollte virtuell sein, so kann es in Unterklassen überschrieben werden ... (ich bin sicher, es irgendwo gesehen ive)
das merkwürdige ist, dass ReSharper pflegt auch virtuelle hinzufügen :
so, wenn ich diesen Code haben:
es schlägt mich:
und wenn ich drücke es:
so wieder mein Fragen:
1) Was ist das Szenario, das diese Linie EventHandler<MyEventArgs> temp = SampleEvent;
löst, in Bezug auf Thread Safty?
2) darf nicht die Funktion virtual
sein? (Ich bin sicher, ich sehe dieses Muster mit virtuellen)
Resharper ist nur eine Sicht auf richtig und falsch. Es ist kein absolutes – podiluska
Beachten Sie, dass es tatsächlich zwei Race-Bedingungen gibt. Diese Codeänderung behebt nur eines dieser Rennen. Siehe Eric Lipperts ausgezeichneten Artikel [Events and Races] (http://blogs.msdn.com/b/ericlippert/archive/2009/04/29/events-and-races.aspx) für eine vollständige Erklärung. – Brian
mögliches Duplikat von [C# Ereignisse und Thread-Sicherheit] (http://stackoverflow.com/questions/786383/c-sharp-events-and-thread-safety) –