具有异步、无限循环和全局变量锁定的 EventHandler 库

EventHandler Library with asynchronous, infinite loop and global variable locking

我正在创建一个 C# 库,它将实现一个事件处理程序,当计算机网络连接发生变化时通知它的侦听器,它有两种状态——已连接和未连接。

鉴于我的要求,我相信我的库中需要一个全局变量来存储 "connected" 布尔值和一个不断检查互联网连接的连续循环,并将该检查的结果与我的全局布尔值进行比较.

我应该执行一个异步循环方法并锁定我的全局布尔值吗?有没有我可以使用的固定设计模式?请给我指出正确的方向,因为我对异步模式和设计原则比较陌生,例子会很有帮助。

注意:我也可能受限于 .NET 4.0,因此 Task.Delay 等有用的东西可能不可用。

这样的事件处理程序已经存在,用于物理网络连接。参见 Event to Detect Network Change (whosebug.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);
                }
            });
    }

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