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 异步,但这对我来说没有帮助,至少我无法在我的代码中实现它。

C# 在焦点丢失和 TextBox 的转折值触发焦点丢失后,在后台运行 Ping

您应该在单独的线程中调用PCIsOnline(textBox.Text)函数。也许这会有所帮助:如何使用 aruguments 在线程中调用该方法并返回一些值祝你好运!