Find, wenn der Prozess ohne Verwendung von System.Diagnostics.Process.Responding @ antwort

Guten Tag allerseits

Dieses Problem war Teil vonnoch einels das Problem gelöst war, wurde mir klar, dass es meines Erachtens doch nicht das Problem war. Trotzdem habe ich dank dessen ein paar Dinge gelernt.

Meine Anwendung erledigt eine Menge Arbeit mit dem Internet Explorer. Von Zeit zu Zeit wird der Internet Explorer auf eine Website mit einem schlechten Javascript-Code umgeleitet, der die Internet Explorer-Oberfläche blockiert. Und folglich blockiere ich auch meine Anwendung, sobald alles auf meiner Anwendung auf dem gleichen @ läufThread.

Um diesem Problem entgegenzuwirken, führt meine Anwendung beim Start ein @ austatic method in einem anderenThread dass alle 15 Sekunden eine einfache Überprüfung durchgeführt wird, ob der IE antwortet oder nicht, und wenn der IE nicht antwortet, schließt er alle seine Prozesse, wodurch die Sperre für meine Anwendung aufgehoben wird. mainThread und dann kann meine Anwendung ihre Arbeit wieder aufnehmen.

Um herauszufinden, ob IE-Prozesse reagieren, hatte ich einen einfachen Code wie diesen:

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...

Um zumProcess.Respondingie @ -Eigenschaft ermittelt, ob der Prozess antwortet, und zwar gemäß den Informationen unter MSDN, diese Eigenschaft benötigt eine andere Eigenschaft namensMainWindowHandle verfügbar sein, um den Überprüfungsvorgang abzuschließen. Und wennMainWindowHandle ist nicht verfügbarProcess.Responding gibt immer true zurück, auch wenn der Prozess nicht reagiert.

nd aus irgendeinem Grund, den ich nicht kenne. In Windows XPMainWindowHandle ist dort nicht verfügbar, alsoResponding ist nicht genau.

Deshalb muss ich einen anderen Weg kennen, um herauszufinden, ob ein bestimmter Prozess in Windows XP reagiert oder nicht.

Jede Hilfe wird gebeten, danke.

PS: Wenn Sie auf der Suche nach einer Website zum Einfrieren des IE sind, gehen Sie hier:http: //aboutmycollege.com

EDIT: Folgender 0xA3-Vorschlag:

Ich habe alle IE-Prozesse überprüft, ob sie das @ hatteMainWindowHandle Eigenschaft, diejenigen, die diese Eigenschaft hatten, schicke ich sieResponding -Eigenschaft an eine MessageBox und melden sie korrekt, wenn der IE unter Windows 7 nicht reagiert, aber nicht unter XP.

Ich habe diesen Code alle 15 Sekunden ausgeführt:

        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());
                }
            }
        }

n Windows 7 und XP meldet er die Prozesse des IE, die das @ nicht habMainWindowHandle Eigenschaft, und in Windows 7 meldet er auch richtig, wenn IE nicht reagiert. Aber in XP sind alle IE-Prozesse mitMainWindowHandle antwortet immer, auch wenn sie es nicht sind.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage