2015-10-16 42 views
0

我创建一个C#库,将实现一个EventHandler,当计算机网络连接更改时通知它的侦听器,它有两个状态 - 连接和未连接。EventHandler库与异步,无限循环和全局变量锁定

根据我的要求,我相信我需要一个全局变量来存储“连接”布尔值和一个不断检查互联网连接的连续循环,并将检查结果与全局布尔值进行比较。

我应该做一个异步循环方法锁定我的全局布尔值吗?有没有可以使用的一套设计模式?请指点正确的方向,因为我对异步模式和设计原则相对陌生,例子会有所帮助。

注:我也可能仅限于.NET 4.0,所以喜欢Task.Delay有用的东西可能无法使用。

回答

1

这种事件处理程序已经存在,用于物理网络连接。见Event to Detect Network Change(stackoverflow.com)

但是,如果你想自己做,还是要检查的其他条件(如互联网接入),你可以这样实现它:

public static bool IsConnected { get; protected set; } 
    protected readonly static object _sync = new object(); 
    protected static Task NetworkTask; 

    public static void Start(int period = 1000) 
    { 
     NetworkTask = Task.Run(() => 
      { 
       lock (_sync) 
       { 
        IsConnected = MyNetworkManager.IsConnected(); 
        System.Threading.Thread.Sleep(period); 
       } 
      }); 
    } 

请注意,您不能直接锁定布尔值,因为它是一个值类型,但是您可以创建一个只读对象来充当锁的代理。

+0

我已经看到EventHandlers存在这样做,但我的任务是编写我自己的。尽管如此,感谢您的实施,这是我自己设想的做法。 – CODe