C# 在焦点丢失和 TextBox 的转折值触发焦点丢失后,在后台运行 Ping
本文关键字:焦点 Ping 运行 后台 TextBox | 更新日期: 2023-09-27 18:30:29
所以我有一个文本框,我在其中键入需要ping的PC的名称。当焦点丢失时,我运行ping:
private void Name_LostFocus(object sender, System.EventArgs e)
{
if (PCIsOnline(textBox.Text))
{
textBox.Background = Brushes.LightGreen;
}
else
{
textBox.Background = Brushes.LightSalmon;
}
}
PCIsOnline 看起来像这样:
public static bool PCIsOnline(string arg)
{
Ping pingSender = new Ping();
PingOptions options = new PingOptions();
options.DontFragment = true;
string data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
byte[] buffer = Encoding.ASCII.GetBytes(data);
int timeout = 40;
try
{
PingReply reply = pingSender.Send(arg, timeout,
buffer, options);
if (reply.Status == IPStatus.Success)
return true;
else
return false;
}
catch
{
return false;
}
}
当电脑在线时,一切都很好,我没有冻结,但是当电脑离线时,我的应用程序会冻结一段时间。我知道这很正常,ping离线PC需要时间。但我的问题是:我如何在后台启动 ping,当它结束时,这将根据 ping 的结果改变启动 ping 的文本框的背景颜色。
我已经阅读了一些关于这个的主题,运行 ping 异步,但这对我来说没有帮助,至少我无法在我的代码中实现它。
您应该在单独的线程中调用PCIsOnline(textBox.Text)函数。也许这会有所帮助:如何使用 aruguments 在线程中调用该方法并返回一些值祝你好运!