【发布时间】:2011-03-31 15:40:58
【问题描述】:
大家好。
这个问题是another one 的一部分,它已经解决了,我意识到我认为这是问题毕竟不是。仍然感谢我学到了一些东西。
我的应用程序使用 IE 进行了大量工作,并且不时地,IE 被重定向到带有一些错误 Javascript 代码的网站,最终阻塞了 IE 界面。因此,一旦我的应用程序上的所有内容都在同一个 Thread 上运行,我的应用程序也会被阻止。
为了解决这个问题,在启动时,我的应用程序在另一个 Thread 中运行 static method,它每 15 秒简单检查 IE 是否响应,如果 IE 没有响应,他会关闭其所有进程,释放我的应用程序主Thread 上的锁,然后我的应用程序可以恢复工作。
要查看 IE 进程是否响应,我有一个简单的代码,如下所示:
bool terminate = false;
foreach (System.Diagnostics.Process exe in System.Diagnostics.Process.GetProcesses())
{
if (exe.ProcessName.StartsWith("iexplore"))
{
if (exe.Responding == false)
{
terminate = true;
break;
}
}
}
// Code to close all IE process's...
为了Process.Responding 属性查找进程是否响应,并且根据MSDN 上的信息,此属性需要另一个名为MainWindowHandle 的属性可用以完成检查过程。如果MainWindowHandle 不可用,Process.Responding 总是返回 true,即使进程没有响应。
出于某种我不知道的原因。在 Windows XP 中,MainWindowHandle 不可用,因此Responding 不准确。
这就是为什么我需要知道另一种方法来查找特定进程是否在 Windows XP 中响应。
感谢您的帮助。
PS:如果您正在寻找一个冻结 IE 的网站,请前往:http://aboutmycollege.com/
编辑:遵循 0xA3 建议:
我检查了所有 IE 进程是否有 MainWindowHandle 属性,那些拥有该属性的人我将他们的 Responding 属性发送到 MessageBox 并且当 IE 在 Windows 7 上没有响应但没有响应时,他们会正确报告经验。
我每 15 秒执行一次此代码:
foreach (System.Diagnostics.Process exe in System.Diagnostics.Process.GetProcesses())
{
if (exe.ProcessName.StartsWith("iexplore"))
{
if (exe.MainWindowHandle == IntPtr.Zero)
{
System.Windows.Forms.MessageBox.Show("Process doesn't have MainWindowHandle");
}
else
{
System.Windows.Forms.MessageBox.Show("Process Responding: " + exe.Responding.ToString());
}
}
}
在 Windows 7 和 Xp 中,他报告没有 MainWindowHandle 属性的 IE 进程,在 Windows 7 中,当 IE 没有响应时,他也正确报告。但在 XP 中,所有带有 MainWindowHandle 的 IE 进程总是响应,即使它们没有响应。
【问题讨论】:
-
你用的是什么版本的IE?
-
@ChickSentMeHighE:IE8。请注意 Process.Responding 在 Windows 7 上运行良好,但在 XP 上运行良好。
标签: c# windows-xp