2010-12-16 7 views
0

Ich habe ein Windows Mobile 6.5 (.net cf 3.5), die eine Singleton-Klasse verwendet, die dieses Muster folgt:Event erstellen auf Singleton Klasse

public sealed class Singleton 
{ 
    static readonly Singleton instance=new Singleton(); 

    // Explicit static constructor to tell C# compiler 
    // not to mark type as beforefieldinit 
    static Singleton() 
    { 
    } 

    Singleton() 
    { 
    } 

    public static Singleton Instance 
    { 
     get 
     { 
      return instance; 
     } 
    } 
} 

reference

Meine Klasse Daten zu sammeln GPS aus der Zwischenantrieb. Was ich will, ist ein Ereignis in der Singleton-Klasse zu erstellen, die ich abonnieren kann? Z.B. MyClass.Instance.LocationChanged + = ...;

Jede Hilfe würde sehr geschätzt werden.

Mark

+0

Seien Sie vorsichtig, jeder Code, der das Ereignis abonniert, muss * explizit * das Abonnement abbestellen. Anderenfalls wird ein Speicherverlust verursacht. –

Antwort

3

Was ist das Problem?

public sealed class Singleton 
{ 
    ... your code ... 

    public delegate LocationChangedEventHandler(object sender, LocationChangedEventArgs ea); 

    public event LocationChangedEventHandler LocationChanged; 

    private void OnLocationChanged(/* args */) 
    { 
    if (LocationChanged != null) 
     LocationChanged(this, new LocationChangedEventArgs(/* args */); 
    } 
} 

public class LocationChangedEventArgs : EventArgs 
{ 
    // TODO: implement 
} 

Anruf OnLocationChanged wann immer Sie wollen das Ereignis feuern.

+0

Für weitere Informationen - http://msdn.microsoft.com/en-us/library/awbftdfh.aspx –

+0

fehlt Ihnen nicht ein "void" vor dem Delegaten? – seveves

0

Sie sollten dies nur in der Lage sein, wie Sie ein Ereignis würde für jede Klasse zu tun.

public event Action<object, EventArgs> LocationChanged; 

können Sie dann eine geschützte virtuelle Methode wie:

protected virtual void OnLocationChanged(EventArgs args) 
{ 
    if(LocationChanged != null) 
    { 
    LocationChanged(this, args); 
    } 
} 

können Sie Ihre OnLocationChanged Methode abfeuern, wo immer Sie auch brauchen, und die Veranstaltung Sie angebracht haben, wird ihre Sache tun.