Sowas löst man über einen sogenannten Watchdog. Das ist ein zweites Programm, das mit dem eigentlichen Programm kommuniziert, und bei Ausbleiben von Antworten meldet, daß es tot ist. Ob man das allerdings zur Auslastungsoptimierung verwenden halte ich für eher unsinnig. Wie andere schon angemerkt haben, müsstest Du (auch für eine Watchdog-Lösung) mal ein paar Application.ProcessMessages an strategischen Stellen einstreuen. Dann sollte auch Windows nicht mehr der Meinung sein, Deine Application wäre abgestürzt.
Ansonsten ist es
imho eines der liebsten Probleme der Informatik, ein Programm zu schreiben, das erkennt ob ein anderes (oder es selbst), fehlerhaft ist
Sherlock