C# 使用Ping时出现蓝屏 我正在运行一个bug,BoDON在ping的中间结束调试。

C# 使用Ping时出现蓝屏 我正在运行一个bug,BoDON在ping的中间结束调试。,c#,visual-studio,debugging,callback,bsod,C#,Visual Studio,Debugging,Callback,Bsod,我有几种方法可以在我的(wpf)应用程序中禁用它(我不断ping),但有时我会忘记这样做,而BSOD 我想绕过这个问题,比如说,在退出调试器之前,更改一个全局allowarelping变量并在回调中休眠2秒钟,这样我就不会BSOD。这是Windows 7中的一个已知错误,当终止进程时,您将得到一个BSOD,错误检查代码为0x76,进程已锁定tcpip.sys中的页面。最相关的反馈文章。也包括在。没有很好的答案,唯一已知的解决方法是退回到4.0之前的.NET版本,它使用另一个不会触发驱动程序错误的

我有几种方法可以在我的(wpf)应用程序中禁用它(我不断ping),但有时我会忘记这样做,而BSOD


我想绕过这个问题,比如说,在退出调试器之前,更改一个全局allowarelping变量并在回调中休眠2秒钟,这样我就不会BSOD。

这是Windows 7中的一个已知错误,当终止进程时,您将得到一个BSOD,错误检查代码为0x76,进程已锁定tcpip.sys中的页面。最相关的反馈文章。也包括在。没有很好的答案,唯一已知的解决方法是退回到4.0之前的.NET版本,它使用另一个不会触发驱动程序错误的winapi函数

在调试时避免ping肯定是避免此问题的最佳方法。您想要的方法将无法工作,当程序遇到断点时将完全冻结,当您停止调试时将完全冻结


最简单的方法是,在附加了调试器的特定情况下,首先不启动ping。使用System.Diagnostic.Debugger.IsAttached属性在代码中检测此问题。

这是一种很好的解决方法:

private void GetPing(){

            Dictionary<string, string> tempDictionary = this.tempDictionary;  //Some adresses you want to test
            StringBuilder proxy = new StringBuilder();

            string roundTripTest = "";
            string location;
            int count = 0;  //Count is mainly there in case you don't get anything

            Process process = new Process{

                StartInfo = new ProcessStartInfo{
                    FileName = "ping.exe",
                    UseShellExecute = false,
                    RedirectStandardOutput = true,
                    CreateNoWindow = true,

                }

            };

            for (int i = 0; i < tempDictionary.Count; i++){

                proxy.Append(tempDictionary.Keys.ElementAt(i));

                process.StartInfo.Arguments = proxy.ToString();

                do{
                    try{

                        roundTripTest = RoundTripCheck(process);

                    }
                    catch (Exception ex){

                        count++;

                    }

                    if (roundTripTest == null){

                        count++;

                    }

                    if (count == 10 || roundTripTest.Trim().Equals("")){

                        roundTripTest = "Server Unavailable";

                    }

                } while (roundTripTest == null || roundTripTest.Equals(" ") || roundTripTest.Equals(""));
            }

            process.Dispose();

        }

我也有同样的问题,这就解决了

刚刚在Windows10中遇到了这个问题,看起来bug仍然存在。但是连接问题已经消失了。我正在Windows 2012R2下解决这个问题。显然,这是从2011年开始的!是否存在连接错误的缓存副本或任何详细信息来确认这是Windows错误而不是驱动程序问题?我正在使用Intel网络驱动程序运行Windows Server 2016 RTM,我可以可靠地重现此问题。有人可以用这种技术很容易地编写一个仅限用户使用的DoS有效负载——我发现关于这个问题的报告可以追溯到2011年和更早的时候。令人惊讶(也非常失望)的是,这仍然是一个问题——尽管我承认这可能是英特尔驱动程序的问题,因此免除了微软的主要责任。windows 8.1中的最新更新、已安装和最新的英特尔NIC驱动程序也存在同样的缺陷。
       private string RoundTripCheck(Process p){


            StringBuilder result = new StringBuilder();
            string returned = "";

            p.Start();

            while (!p.StandardOutput.EndOfStream){

                result.Append(p.StandardOutput.ReadLine());

                if (result.ToString().Contains("Average")){

                    returned = result.ToString().Substring(result.ToString().IndexOf("Average ="))
                                     .Replace("Average =", "").Trim().Replace("ms", "").ToString();
                    break;
                }


                result.Clear();

            }

            return returned;

        }