Versuchen Sie, ein Ereignis auszulösenC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Versuchen Sie, ein Ereignis auszulösen

Post by Anonymous »

Ich habe einen Windows-Multimedia-Timer, der alle X ms tickt. Bei jedem Tick erledige ich einen Job. Innerhalb dieses Jobs kann ein Ereignis ausgelöst werden:

Code: Select all

public event EventHandler SomeEvent;
Aber WinMM-Timer werden auf einem dedizierten Systemthread ausgeführt. Was passiert, wenn in einem der SomeEvent-Handler eine Ausnahme aufgetreten ist? Die gesamte App stürzt ab.
Eine weitere Sorge: Was passiert, wenn wir mehrere Handler haben und im ersten Handler eine Ausnahme auftritt? Alle Handler außer dem ersten werden übersprungen.
Also mache ich in meinem Code so etwas:

Code: Select all

var someEvent = SomeEvent;
if (someEvent == null)
return;

foreach (EventHandler handler in someEvent.GetInvocationList())
{
try
{
handler?.Invoke(this, EventArgs.Empty);
}
catch (Exception ex)
{
Console.WriteLine($"Exception in event handler: {ex.Message}");
}
}
Meine Frage: Ist es sinnvoll, solche Schutzvorrichtungen für die Ausführung von Event-Handlern zu verwenden? Oder ist es ein Zeichen für schlechtes Design?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post