gpt4 book ai didi

C#线程和轮询

转载 作者:太空狗 更新时间:2023-10-29 23:17:18 30 4
gpt4 key购买 nike

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

  1. 如果有网络连接,显示一个带复选标记的绿色圆圈
  2. 如果没有网络连接,显示一个带 X 的红色圆圈

所以我有:

using System.Net.NetworkInformation;

bool isConnected = NetworkInterface.GetIsNetworkAvailable()

所以我正在考虑启动一个新线程或使用后台工作进程,因为托盘图标是一个 NotifyIcon,它是一个组件,所以我不能使用:

Form.Invoke(delegate, object[])

更新 NotifyIcon 类的图标属性。

我最关心的是轮询过程:我可以编写一些逻辑:

while (true) 
{
System.Threading.Thread.Sleep(1000);
isConnected = NetworkInterface.GetIsNetworkAvailable();
if (isConnected)
notifyIcon.Icon = "ConnectedIcon.ico";
else
notifyIcon.Icon = "DisconnectedIcon.ico";
}

但我看过几篇文章告诉我远离 Sleep(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#线程和轮询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8307086/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com