2010-12-16 87 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方法和事件的,你已经附加将做自己的事情。