【发布时间】:2011-11-02 04:23:33
【问题描述】:
这只是蓝屏显示的重要内容。我在 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# 程序应该永远不会导致蓝屏?
【问题讨论】:
-
您不应该直接导致蓝屏。但是如果来自微软的底层代码有一个错误,它可能会导致它
-
没有“应该”创建蓝屏的程序...
-
support.microsoft.com/kb/256010 暗示这与驱动程序行为不当有关,可能是基于您的程序的网络驱动程序。此 KB 指示指示哪个驱动程序可能有故障的方法;它与您的托管代码无关。
-
不,用户模式代码不会导致蓝屏,即使它来自 Microsoft。您是否正在运行任何 VPN 软件或安全软件?
-
@Andrew,我想你会发现 ping'o'death 应该会导致蓝屏死机,但不可否认,这是一个特例 :-) 在任何情况下案例,如果(像我一样)你有一个 A 类家庭网络怎么办? :-)
标签: c# sockets thread-safety