المشكلة: يحدث ThreadAbortException إذا كنت تستخدم Response.End أو Response.Redirect أو Server.Transfer

الأعراض

إذا كنت تستخدم أسلوب Response.End، أو Response.Redirect, أو Server.Transfer، يحدث استثناء ThreadAbortException. يمكنك استخدام عبارة try-catch لتصفية هذا الاستثناء.

السبب

تنهي وسيلة Response.End تنفيذ الصفحة وتبدل التنفيذ إلى حدث Application_EndRequest في مسار الحدث الخاص بالتطبيق. السطر من التعليمات البرمجية الذي يتبع Response.End لم يتم تنفيذه.

تحدث هذه المشكلة في وسائل Response.Redirect و Server.Transfer بسبب استدعاء كلا الأسلوبين لـResponse.End داخليا.

الحل

للتغلب على هذه المشكلة، اتبع إحدى الطرق التالية:

  • لـResponse.End, استدعِ وسيلة HttpContext.Current.ApplicationInstance.CompleteRequest بدلًا من Response.End لاجتياز تنفيذ التعليمة البرمجية لحدث Application_EndRequest.
  • لـ Response.Redirect, استخدم طريقة تحميل زائد، Response.Redirect(String url, bool endResponse) التي تجتاز خطأ لمعلمة endResponse لاجتياز الاستدعاد الداخلي لـ Response.End. على سبيل المثال:
      Response.Redirect ("nextpage.aspx", false);
    إذا كنت تستخدم هذا الحل البديل، فالتعليمات البرمجية التي تتبع Response.Redirect منفذة.
  • لـ Server.Transfer، استخدم وسيلة Server.Execute بدلاً من ذلك.

تصريح

هذا السلوك مرتبط بالتصميم.
خصائص

رقم الموضوع: 312629 - آخر مراجعة: 30‏/08‏/2013 - المراجعة: 1

Microsoft ASP.NET 4.5, Microsoft ASP.NET 4.0, Microsoft ASP.NET 3.5, Microsoft ASP.NET 2.0, Microsoft ASP.NET 1.1, Microsoft ASP.NET 1.0

تعليقات