具有异步、无限循环和全局变量锁定的 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);
}
});
}
请注意,您不能直接锁定布尔值,因为它是值类型,但您可以创建一个只读对象来充当锁定代理。
我正在创建一个 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);
}
});
}
请注意,您不能直接锁定布尔值,因为它是值类型,但您可以创建一个只读对象来充当锁定代理。