我做了一个很简单通过进程调用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;
            
        }

解决方案 »

  1.   

    private static string pingResult(string str)
            {
                Ping ping = new Ping();
                PingReply reply = ping.Send(str, 1000);
                if (reply.Status == IPStatus.Success)
                {
                    return "连接成功!";
                }
                else
                {
                    return "连接失败!";
                }
            }
    试试看吧!其中ping.Send()方法为等待的毫秒数,我这设置成1000毫秒即1秒钟如果连不上就返回失败!建议最好再加上2楼说的,用线程去做,这样就更灵活了。
      

  2.   

    改个错,ping.Send()方法的第二个参数为等待的毫秒数。