2010-12-16 84 views
0

我有一個的Windows Mobile 6.5(.NET CF 3.5),使用下面這個模式的單例類:上Singleton類創建活動

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

我的類用於從收集的GPS數據中間驅動器。我想要的是在我可以訂閱的單例類上創建一個事件?例如。 MyClass.Instance.LocationChanged + = ...;

任何幫助將不勝感激。

馬克

+0

請注意,訂閱該事件的任何代碼必須*顯式*取消訂閱它。不這樣做會導致內存泄漏。 – 2010-12-16 15:06:04

回答

3

有什麼問題?

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 
} 

打電話OnLocationChanged只要你想發射事件。

+0

欲瞭解更多信息 - http://msdn.microsoft.com/en-us/library/awbftdfh.aspx – 2010-12-16 15:06:42

+0

是不是你錯過了代表前面的「空白」? – seveves 2013-02-08 14:38:37

0

你應該能夠像任何課程上的事件一樣做到這一點。

public event Action<object, EventArgs> LocationChanged; 

你就可以有一個受保護的虛擬方法,如:

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

您可以觸發了你在任何你需要太OnLocationChanged方法和事件的,你已經附加將做自己的事情。