簡體   English   中英

使用 Response.Redirect() 時獲取線程中止異常

[英]Getting Thread Abort Exception while using Response.Redirect()

我在更新面板下的頁面中編寫了以下代碼。

protected void myGrid_RowCommand(object sender, GridViewCommandEventArgs e)
{
    try
    {
        if (e.CommandName =="EditNames")
        {
            long lSelectedName = Convert.ToInt64(e.CommandArgument);
            Session["SelectedItem"] = lSelectedName;
            Response.Redirect("EditItem.aspx");
        }
        else if (e.CommandName =="DeleteNames")
        {
            long lSelectedName = Convert.ToInt64(e.CommandArgument);
            ValidName.DeleteItem(lSelectedName);

            ScriptManager.RegisterStartupScript(this, GetType(), "Key", "alert('Name deleted sucessfully')", true);
        }
    }
    catch (System.Threading.ThreadAbortException)
    {

    }
    catch (Exception ex)
    {
        Error handling code...
    }
}

在這里,我在重定向時遇到線程中止異常。 但是,我通過使用錯誤處理程序System.Threading.ThreadAbortException解決了它。

但我不確定為什么在重定向時會出現該錯誤。 即使我解決了這個問題,我也想知道我的編碼方式是否有任何錯誤,或者有什么方法可以完全阻止錯誤觸發。

提供您的意見...

請注意,該頁面位於 AJAX UPDATE PANEL 下。

請閱讀這篇文章 - http://blogs.msdn.com/b/tmarq/archive/2009/06/25/correct-use-of-system-web-httpresponse-redirect.aspx

而不是結束請求,通過調用Context.ApplicationInstance.CompleteRequest()繞過請求執行管道是一個好習慣。

所以你的代碼看起來像這樣:

Response.Redirect("TargetPage", false);        //write redirect
Context.ApplicationInstance.CompleteRequest(); // end response

即使我解決了這個問題,我想知道我編碼的方式是否有任何錯誤

沒錯,你做得很好。

預計會出現此錯誤。 拋出它是因為重定向時服務器線程實際上已中止。 MSDN文檔

如果為endResponse參數指定true,則此方法為原始請求調用End方法,該方法在完成時拋出ThreadAbortException異常。

以及您正在使用重載文檔

重定向調用End,在完成時拋出ThreadAbortException異常。

發生這種情況是因為您正在重定向try / catch塊內部。 不要這樣做。

Response.Redirect("Location", false);

它在沒有“ThreadAbortException”的情況下工作正常。

在重定向方法中提到false就足夠了,比如Response.Redirect(“TargetPage”,false);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM