+-

我有一个托盘图标,需要显示两个图标:
>如果存在网络连接,则显示带有复选标记的绿色圆圈
>如果没有网络连接,则显示带有X的红色圆圈
所以我拥有的是:
using System.Net.NetworkInformation;
bool isConnected = NetworkInterface.GetIsNetworkAvailable()
所以我正在考虑启动一个新线程或使用后台工作进度,因为托盘图标是NotifyIcon,这是一个组件,所以我不能使用:
Form.Invoke(delegate, object[])
更新NotifyIcon类的icon属性.
我最关心的是轮询过程:我可以编写一些逻辑:
while (true)
{
System.Threading.Thread.Sleep(1000);
isConnected = NetworkInterface.GetIsNetworkAvailable();
if (isConnected)
notifyIcon.Icon = "ConnectedIcon.ico";
else
notifyIcon.Icon = "DisconnectedIcon.ico";
}
但我看过几篇文章告诉我要远离睡眠(1000).我似乎无法找到这些文章,因为我没有给它们添加书签.我只是想知道为什么这对于一个线程中的轮询不是一个好主意.
最佳答案
您可以在NetworkChange上注册一个事件,以便在状态更改时收到通知:
NetworkChange.NetworkAvailabilityChanged += new NetworkAvailabilityChangedEventHandler(NetworkChange_NetworkAvailabilityChanged);
void NetworkChange_NetworkAvailabilityChanged(object sender, NetworkAvailabilityEventArgs e)
{
if (e.IsAvailable) {
Console.WriteLine("Network Available");
} else {
Console.WriteLine("Network Unavailable");
}
}
点击查看更多相关文章
转载注明原文:C#线程和轮询 - 乐贴网