我做了一个很简单通过进程调用DOS的PING命令
如果PING的IP对象都正常,那程序会很快。但现在如果有某个IP地址PING不通的话,进程就会卡一下,要等待到DOS里出现Request timed out.(一般是五秒,可以PING一个不存在的地址就知道这个时间)。这样很烦。我用了定时器,每十秒执行一次这个进程,但现在它一个地址PING不通就卡五秒,二个就卡十秒。在这期间整个程序界面都处于卡死状态不能操作。有什么办法可以解决吗?以下是这个进程的代码:
private string CmdPing(string strip)
{
// 实例一个Process类,启动一个独立进程
Process p = new Process(); // 设定程序名
p.StartInfo.FileName = "cmd.exe";
// 关闭Shell的使用
p.StartInfo.UseShellExecute = false;
// 重定向标准输入
p.StartInfo.RedirectStandardInput = true;
// 重定向标准输出
p.StartInfo.RedirectStandardOutput = true;
//重定向错误输出
p.StartInfo.RedirectStandardError = true;
// 设置不显示窗口
p.StartInfo.CreateNoWindow = true; //启动进程 string pingrst; p.Start(); //让进程执行CMD命令
p.StandardInput.WriteLine("ping -n 1 " + strip); p.StandardInput.WriteLine("exit");
//从输出流获取命令执行结果
string strRst = p.StandardOutput.ReadToEnd(); if (strRst.IndexOf("(0% loss)") != -1)
pingrst = "连接";
else pingrst = "异常";
p.Close(); return pingrst;
}
如果PING的IP对象都正常,那程序会很快。但现在如果有某个IP地址PING不通的话,进程就会卡一下,要等待到DOS里出现Request timed out.(一般是五秒,可以PING一个不存在的地址就知道这个时间)。这样很烦。我用了定时器,每十秒执行一次这个进程,但现在它一个地址PING不通就卡五秒,二个就卡十秒。在这期间整个程序界面都处于卡死状态不能操作。有什么办法可以解决吗?以下是这个进程的代码:
private string CmdPing(string strip)
{
// 实例一个Process类,启动一个独立进程
Process p = new Process(); // 设定程序名
p.StartInfo.FileName = "cmd.exe";
// 关闭Shell的使用
p.StartInfo.UseShellExecute = false;
// 重定向标准输入
p.StartInfo.RedirectStandardInput = true;
// 重定向标准输出
p.StartInfo.RedirectStandardOutput = true;
//重定向错误输出
p.StartInfo.RedirectStandardError = true;
// 设置不显示窗口
p.StartInfo.CreateNoWindow = true; //启动进程 string pingrst; p.Start(); //让进程执行CMD命令
p.StandardInput.WriteLine("ping -n 1 " + strip); p.StandardInput.WriteLine("exit");
//从输出流获取命令执行结果
string strRst = p.StandardOutput.ReadToEnd(); if (strRst.IndexOf("(0% loss)") != -1)
pingrst = "连接";
else pingrst = "异常";
p.Close(); return pingrst;
}
{
Ping ping = new Ping();
PingReply reply = ping.Send(str, 1000);
if (reply.Status == IPStatus.Success)
{
return "连接成功!";
}
else
{
return "连接失败!";
}
}
试试看吧!其中ping.Send()方法为等待的毫秒数,我这设置成1000毫秒即1秒钟如果连不上就返回失败!建议最好再加上2楼说的,用线程去做,这样就更灵活了。