【发布时间】:2017-01-27 03:35:13
【问题描述】:
下面是一个按钮,按下它会调用一个 ping 一堆 IP 地址的函数。如果 IP 地址返回响应,它会将 IP 地址添加到 output_networkSearch.Text。
private void button_networkSearch_Click(object sender, RoutedEventArgs e)
{
output_networkSearch.Text = networkSearch(Convert.ToInt32(input_searchLimit.Text));
}
以下不是整个方法,只是我无法工作的部分。 for 循环从用户默认网关 IP 地址的最后一位数字开始,并在用户输入的任何限制 (1 - 255) 处停止。
// i 等于默认网关 IP 的最后一位,如果是 192.168.0.1 则 i = 1。
for (int i = Convert.ToInt32(splitGatewayIP[3]); i <= searchLimit; i = i + 1)
{
// If the method receieves a ping reply...
if (PingHostSweep(gatewayIPRebuild + i))
{
// Returns 192.168.0. + i + ACTIVE
string response = gatewayIPRebuild + i + " ACTIVE";
return response;
}
else
{
string response = gatewayIPRebuild + i + " CLOSED";
return response;
}
}
这在控制台应用程序上有效,但对于 WPF 应用程序,它似乎运行一次循环并由于 return 语句而停止。
解决此问题的想法是删除 Return Response 语句并尝试直接访问 TextBox (output_networkSearch)。
所以我会这样做:
for (int i = Convert.ToInt32(splitGatewayIP[3]); i <= searchLimit; i = i + 1)
{
// If the method receieves a ping reply...
if (PingHostSweep(gatewayIPRebuild + i))
{
// Returns 192.168.0. + i + ACTIVE
string response = gatewayIPRebuild + i + " ACTIVE";
output_networkSearch.Text = reponse;
}
else
{
string response = gatewayIPRebuild + i + " CLOSED";
output_networkSearch.Text = reponse;
}
}
但是,由于某种原因,我无法访问该方法中的文本框。我才刚刚开始学习 C#,所以我并不完全熟悉它的工作原理。
这是一个部分工作概念的图像。如您所见,限制设置为 10,因此它应该 ping IP 地址 1 到 10 并给出 ACTIVE 或 CLOSED 响应。这在我的控制台应用程序版本中确实有效。
【问题讨论】:
-
我将修改该方法,以便将成功的 IP 地址附加到字符串中,而不是“返回响应”。然后在 for 循环结束时,返回字符串。然后您可以照常使用该字符串更新文本框。这样做的缺点是文本框仅在所有 IP 地址都被 ping 通后才会更新,而不是持续更新。