因此,我有一个文本框,在其中输入需要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;
}
}
PC处于联机状态时,一切都很好,并且没有冻结,但是PC处于脱机状态时,我的应用程序冻结了一段时间。我知道这很正常,对离线PC进行ping操作会花费一些时间。但是我的问题是:如何在后台启动ping,当它结束时,将根据ping的结果更改启动ping的文本框的背景颜色。
我已经阅读了一些与此相关的主题,运行ping异步,但这至少对我来说没有帮助,至少我无法在代码中实现它。
您应该在单独的线程中调用PCIsOnline(textBox.Text)函数。也许这会有所帮助:如何在带有参数的线程中调用该方法并返回一些值祝您好运!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句