gpt4 book ai didi

c# - 使用任务检查互联网连接

转载 作者:行者123 更新时间:2023-11-30 12:45:16 25 4
gpt4 key购买 nike

我正在尝试执行一个后台任务来检查互联网连接而不阻塞 GUI(检查功能需要 3 秒来检查连接)。如果成功(或失败),面板会显示图像(根据结果显示为红色或绿色)。

我的代码:

public Image iconeConnexion;

public Image IconeConnexion
{
get { return iconeConnexion; }
set { iconeConnexion = value; }
}

public void myPingCompletedCallback(object sender, PingCompletedEventArgs e)
{

if (e.Cancelled || e.Error != null)
{
this.iconeConnexion = WindowsFormsApplication1.Properties.Resources.red;
return;
}

if (e.Reply.Status == IPStatus.Success)
this.iconeConnexion = WindowsFormsApplication1.Properties.Resources.green;

}

public void checkInternet()
{
Ping myPing = new Ping();
myPing.PingCompleted += new PingCompletedEventHandler(myPingCompletedCallback);
try
{
myPing.SendAsync("google.com", 3000 /*3 secs timeout*/, new byte[32], new PingOptions(64, true));
}
catch
{
}
}

我在所有控件加载后加载表单中的调用:

Task Parent = new Task(() =>
{
checkInternet();
MessageBox.Show("Check");
});

//Start the Task
Parent.Start();
Parent.Wait();

应用程序运行但到目前为止没有显示图像。找不到原因。

你能帮我解决这个问题吗?

最佳答案

由于您的问题中没有太多信息,我假设当尝试从后台线程设置 UI 元素时,Task 正在抛出并吞没异常。

由于对服务器执行 ping 操作是一种 IO 绑定(bind)操作,因此无需分拆新线程。结合新的 async-await 可以使事情变得更容易C# 5 中引入的关键字。

这是使用 Ping.SendPingAsync :

public async Task CheckInternetAsync()
{
Ping myPing = new Ping();
try
{
var pingReply = await myPing.SendPingAsync("google.com", 3000, new byte[32], new PingOptions(64, true));
if (pingReply.Status == IPStatus.Success)
{
this.iconeConnexion = WindowsFormsApplication1.Properties.Resources.green;
}
}
catch (Exception e)
{
this.iconeConnexion = WindowsFormsApplication1.Properties.Resources.red;
}
}

并在您的 FormLoaded 事件中调用它:

public async void FormLoaded(object sender, EventArgs e)
{
await CheckInternetAsync();
}

作为旁注:

  1. 执行 Task 并立即等待它通常意味着您做错了什么。如果这是所需的行为,只需考虑同步运行该方法。

  2. 始终建议使用 Task.Run 而不是 new Task。前者返回一个“热任务”(已经启动的任务),而后者返回一个“冷任务”(一个尚未启动并等待Start 方法被调用)。

关于c# - 使用任务检查互联网连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25363839/

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