C#线程和轮询

我有一个托盘图标,需要显示两个图标:

>如果存在网络连接,则显示带有复选标记的绿色圆圈
>如果没有网络连接,则显示带有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#线程和轮询 - 代码日志