C#程序导致蓝屏?

标签 c# sockets thread-safety

这只是蓝屏显示的重要内容。我在 Windows 7 x64 上。

“已检测到问题,Windows 已关闭以防止损坏 到您的计算机。

PROCESS_HAS_LOCKED_PAGES

* 停止:0x00000076(0x0000000000000000、0xfffffa8009dcd060、0x0000000000000011、 0x0000000000000000)

我现在无法处理它,因为每次关闭它时都会出现蓝屏! 该程序除了运行下面的后台工作程序外还没有做任何事情。它会 ping 所有可能属于用户家庭网络的地址,并尝试连接到另一个程序将监听的特定端口。

private void NetworkScanner_DoWork(object sender, DoWorkEventArgs e)
    {
        bool ExceptionEncountered = false;
        int IPsProcessed = 0;

        NetworkSearcherOutput = "Starting network scanner...";
        NetworkSearcher.ReportProgress(0);
        Thread.Sleep(1000);

        foreach (IPAddress IP in Dns.GetHostAddresses(Dns.GetHostName()))
        {
            if (IP.AddressFamily == AddressFamily.InterNetwork)
            {
                string[] Octets = IP.ToString().Split('.');
                Octets[3] = "0";

                IPAddress CurrentAddressIteration = StringArrayToIP(Octets);
                while (GetLastOctet(CurrentAddressIteration) != 255)
                {
                    PingReply Reply = new Ping().Send(CurrentAddressIteration, 5);

                    if (Reply.Status == IPStatus.Success)
                    {
                        NetworkSearcherOutput = CurrentAddressIteration.ToString() + " sent response.";
                        NetworkSearcher.ReportProgress(0);
                        Thread.Sleep(500);

                        InClient Client = new InClient(CurrentAddressIteration);

                        try
                        {
                            Client.Connect();

                            SnapshotBox.Image = Client.Receive(typeof(Image));

                            NetworkSearcherOutput = CurrentAddressIteration.ToString() + " is running program.";
                            NetworkSearcher.ReportProgress(0);
                            Thread.Sleep(1000);
                        }

                        catch (Exception E)
                        {
                            // A socket exception is expected when the client is not running the program.
                            if (E is SocketException)
                            {
                                Client.Close();

                                NetworkSearcherOutput = CurrentAddressIteration.ToString() + " is not running program.";
                                NetworkSearcher.ReportProgress(0);
                                Thread.Sleep(1000);
                            }

                            //Unhandled exception. Show messagebox and close.
                            else
                            {
                                MessageBox.Show("Network scanner encountered an unhandled exception.\n\n" + E.GetType().ToString() + ": " + E.Message, "Unhandled Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                ExceptionEncountered = true;
                                break;
                            }
                        }
                    }

                    else
                    {
                        NetworkSearcherOutput = CurrentAddressIteration.ToString() + " did not respond.";
                        NetworkSearcher.ReportProgress(0);
                    }

                    IPsProcessed++;

                    if (IPsProcessed == 5)
                    {
                        NetworkSearcher.ReportProgress(2);
                        IPsProcessed = 0;
                    }

                    Octets = CurrentAddressIteration.ToString().Split('.');
                    Octets[3] = (Int32.Parse(Octets[3]) + 1).ToString();
                    CurrentAddressIteration = StringArrayToIP(Octets);
                }
            }
        }

        if (!ExceptionEncountered)
        {
            NetworkSearcherOutput = "Network scanning complete.";
            NetworkSearcher.ReportProgress(0);
            NetworkSearcher.ReportProgress(100);
        }

        else
        {
            NetworkSearcherOutput = "Network scanning encountered an error.";
            NetworkSearcher.ReportProgress(-1);
        }

我认为 C# 程序应该永远不会导致蓝屏?

最佳答案

几周前我发现了这个问题。它仅在使用 .NET 4 时发生。

报告于 MS Connect .

编辑:

(将*)将此链接添加到 MS Connect 错误报告。

*login.live.com 再次进入死循环...

关于C#程序导致蓝屏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7975801/

相关文章:

php - 我无法在 php 中运行客户端/服务器程序

c# - 寻找显示批处理文件输出的 C# WinForms 应用示例

c# - 如何设置默认值

c# - 无论如何,是否可以在 azure 函数中使用 AddSecretClient DI 扩展?

python - 如何修复 python socket-io 服务器中的 "Access-Control-Allow-Origin"错误

java - 更新对不可变对象(immutable对象)线程安全的引用

c# - 什么时候应该在不可变结构上实现 GetHashCode?

php - 如何以编程方式调用 WebSocket(使用 PHP)?

java - 线程安全单例和内部类解决方案

c# - 串行任务执行器;这个线程安全吗?