mar*_*adi 5 c# multithreading thread-safety visual-studio-2010 visual-studio
我在数据表中有一个很大的 IP 地址列表,我必须如此快速地对它们执行 ping 操作,我使用了以下代码:
public bool PingIP(string IP)
{
bool result = false;
try
{
Ping ping = new Ping();
PingReply pingReply = ping.Send(IP);
if (pingReply.Status == IPStatus.Success)
result = true;
}
catch
{
result = false;
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
然后我在 while 循环中调用它:
private void CheckNetworkState()
{
while (rowindexping > -1)
{
if (rowindexping == tbl_ClientInfo.Rows.Count)
{
rowindexping = -1;
return;
}
string ip = tbl_ClientInfo.Rows[rowindexping]["clientip"].ToString();
if (!PingIP(ip))
{
do something
}
rowindexping++;
Thread.Sleep(100);
}
}
Run Code Online (Sandbox Code Playgroud)
因为我想在项目的后台完成这项工作,所以我在线程中调用该类:
threadping = new Thread(CheckNetworkState);
threadping.IsBackground = true;
threadping.Start();
Run Code Online (Sandbox Code Playgroud)
我的问题是它需要很多时间并且在后台不起作用。我的意思是系统正忙,直到 tbl_clientinfo 中的所有 IP 地址都通过 ping 类。我希望该系统检查所有行,因为我正在处理项目的其他部分。
我做对了吗?