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

时间:2015-10-16 19:55:39

标签: c# asynchronous event-handling locking

我正在创建一个C#库,它将实现一个EventHandler,当计算机网络连接发生变化时会通知它的监听器,它有两个状态 - 连接和未连接。

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

我应该使用锁定我的全局布尔值来执行异步循环方法吗?我可以使用任何设定的设计模式吗?请指出正确的方向,因为我对异步模式和设计原则相对较新,示例会有所帮助。

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

1 个答案:

答案 0 :(得分: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);
                }
            });
    }

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