Ich habe eine asp.net 2.0-Webanwendung, die eine lange laufende gespeicherte Proc aufruft (ca. 3 Minuten). Der SP führt tatsächlich viele Aufgaben im Backend aus.Behandeln von nicht behandelten Fehlern, die in einem sekundären Thread-Prozess auftreten
Meine Seite verwendet Threading und Ajax (Update-Panel) und ein Timer-Steuerelement, um eine Fortschrittleiste für den Benutzer anzuzeigen. Das alles funktioniert großartig, es sei denn, es gibt einen Fehler in der SP, der den Bildschirm nur einfriert.
Ich habe versucht, eine SafeThread-Klasse zu verwenden, die ich auf codeProject gefunden habe, die den Thread-Prozess umschließt und ein Ereignis erstellt, das im Falle einer Ausnahme behandelt werden kann.
Im Event-Handler möchte ich nur den Benutzer auf eine Fehlerseite umleiten und einen Fehler anzeigen. Beim Testen kann ich den Event-Handler einbrechen. Der Aufruf von Server.Transfer oder Response.Redirect hat jedoch keinerlei Auswirkungen.
Ich bin mir nicht sicher, warum das passiert. Ich werde meinen Code unten posten. Irgendwelche Ideen oder alternative Vorschläge geschätzt.
protected void btnSave_OnClick(object sender, EventArgs e)
{
DAC dac = new DAC();
Session["RerunStatus"] = 0;
SafeThread thrd = new SafeThread(new ParameterizedThreadStart(dac.RerunTest));
thrd.IsBackground = true;
//tell the SafeThread to report
//ThreadAbort exceptions
thrd.ShouldReportThreadAbort = true;
//attach a ThreadException handler for
//reporting SafeThread exceptions
thrd.ThreadException += new
ThreadThrewExceptionHandler(thrd_ThreadException);
thrd.Start(ddlRundate.SelectedItem.Text);
Session["RerunThread"] = thrd;
btnSave.Enabled = false;
Timer1.Enabled = true;
}
void thrd_ThreadException(SafeThread thrd, Exception ex)
{
//thrd.Abort();
Timer1.Enabled = false;
//Response.Redirect("ErrorPage.aspx");
Server.Transfer("ErrorPage.aspx?ErrorMsg=" + ex.Message);
//thrd.Abort();
}
Um es einfacher zu verstehen (und zu beantworten) habe ich versucht, Ihren Text in Absätzen ein bisschen zu brechen. Bitte überprüfen Sie, ob ich die Bedeutung nicht zu sehr geändert habe. Wenn ja, bitte zurückrollen. –
Auch ich nehme an, das ist asp.net? –