Entwickler-Ecke

WinForms - Nicht nachvollziehbarer Fehler beim Arbeiten mit Events


Macoy - Di 09.05.06 20:29
Titel: Nicht nachvollziehbarer Fehler beim Arbeiten mit Events
Hallo,

Vielleicht leide ich wiedermal unter Betriebsblindheit, aber ich krieg hier stets eine NullPointer Exception und kann nicht nachvollziehen, wo sie herkommt.

Also, ich habe ein Event und Delegate (SegmentSelected), welches in DataSelectionChanged (ebendfalls ein EventHandler) ausgelöst wird.

Nun bekomme ich immer an dieser Stelle, wo das Event ausgelöst werden soll, einen NullPointerEx vom Debugger gemeldet, obwohl das nicht sein dürfte. Alle beteiligten Objekte sind nicht null und konsistent (gäbe es dort ein problem, würde der debugger ja dort hin springen). Der Assoziierte Eventhandler ist ebendfalls ok, selbst wenn kein Eventhandler festgelegt ist (das Event also praktisch in Wald springt ) kommt die Exception.

Einzige Besonderheit ist halt, das "DataSelectionChanged" ebendfalls ein Eventhandler ist, kann das daran liegen ?



C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
public delegate void OnSegmentSelected ( object sender , TSegment selection );

public partial class SignalOverview
{
public event OnSegmentSelected SegmentSelected;

// misc implementations
.
.

public SpeechSignal SSignal;   // is never NULL


void DataSelectionChanged ( object sender, int startSample, int endSample)
{
if(ss != null)
SegmentSelected ( this, ss.CreateSegment(startSample, endSample - startSample));
// Debugger zeigt Null Exception an bei dieser Zeile, obwohl 
// ss != null und ss.CreateSegment(...) != null
}


}


Christian S. - Mi 10.05.06 01:24

Es ist schon spät, also vielleicht schreibe ich was dummes, aber ich versuch's trotzdem:

Ist SegmentSelected denn irgendwo zugewiesen worden?


Macoy - Mi 10.05.06 11:37

Ja und Nein ... Ich habe beide Fälle ausprobiert mit dem gleichen Ergebniss.

Eigentlich dürfte doch nichts passieren, auch wenn es nicht zugewiesen ist.

Man muss ja nicht alle Events eines Controls behandeln.


Kha - Mi 10.05.06 13:58

user profile iconMacoy hat folgendes geschrieben:
Eigentlich dürfte doch nichts passieren, auch wenn es nicht zugewiesen ist.
Nein, dann gibt es eben eine NullReferenceException. Es wäre eine ziemliche Ressourcenverschwendung vom CSC, wenn er für ein Event, dem noch gar kein Eventhandler zugewiesen wurde, schon einen Delegate erstellen würde.
Auch wenn du sagst, dass es ebenfalls mit Eventhandlern nicht funktioniert, solltest du also auf jeden Fall SegmentSelected auf null prüfen.