Найти, если процесс отвечает, не используя System.Diagnostics.Process.Responding

Всем добрый день.

Эта проблема была частьюдругой что это было решено, я понял, что то, что я думал, это проблема, в конце концов, это не так. Тем не менее, благодаря этому я узнал пару вещей.

Мое приложение выполняет большую часть работы с IE, и время от времени IE перенаправляется на веб-сайт с некоторым плохим кодом Javascript, который в итоге блокирует интерфейс IE. И, следовательно, блокирование моего приложения, как только все в моем приложении работает на том жеThread.

Чтобы устранить эту проблему, при запуске мое приложение запускаетstatic method в другойThread что каждые 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 XPMainWindowHandle там нет такResponding не точно

Вот почему мне нужно знать другой способ узнать, отвечает ли определенный процесс в Windows XP или нет.

Любая помощь приветствуется, спасибо.

PS: Если вы ищете сайт, чтобы заморозить IE, вот так:http://aboutmycollege.com/

РЕДАКТИРОВАТЬ: После предложения 0xA3:

Я прошел проверку всех процессов IE, если они имелиMainWindowHandle собственность, те, кто имел эту собственность, я посылаю имResponding свойство MessageBox, и они сообщают правильно, когда IE не отвечает на Windows 7, но не на XP.

Я выполнял этот код каждые 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 он сообщает о процессах IE, которые не имеютMainWindowHandle свойство, и в Windows 7 он также правильно сообщает, когда IE не отвечает. Но в XP все процессы IE сMainWindowHandle всегда отвечают, даже когда они не.

Ответы на вопрос(1)

Ваш ответ на вопрос