J'ai une application Web asp.net 2.0 qui appelle un proc stocké en cours d'exécution (environ 3 minutes). Le sp effectue de nombreuses tâches sur le backend.Gestion des erreurs non gérées qui se produisent dans un processus threadé secondaire
Ma page utilise threading et ajax (panneau de mise à jour) et un contrôle de minuterie pour afficher une barre de progression à l'utilisateur. Tout cela fonctionne très bien à moins qu'il y ait une erreur dans le sp qui gèle simplement l'écran.
J'ai essayé d'utiliser une classe SafeThread que j'ai trouvée sur codeProject qui encapsule le processus thread et crée un événement qui peut être géré dans le cas d'une exception.
Dans le gestionnaire d'événements, je veux juste rediriger l'utilisateur vers une page d'erreur et afficher une erreur. Lors des tests, je peux casser le gestionnaire d'événements. Cependant, appeler Server.Transfer ou Response.Redirect n'a aucun effet.
Je ne sais pas pourquoi cela se produit. Je posterai mon code ci-dessous. Des idées ou des suggestions alternatives appréciées.
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();
}
Afin de faciliter la compréhension (et la réponse), j'ai essayé de diviser votre texte en paragraphes. Merci de vérifier si je n'ai pas trop changé de sens. Si oui, veuillez revenir en arrière. –
Aussi, je suppose que c'est asp.net? –