2010-12-06 12 views
12

मुझे यह त्रुटि मिली थ्रेड निरस्त किया जा रहा था।, आज दोपहर मेरे त्रुटि लॉग में।प्रतिक्रिया। रेडियोधर्मी और धागा त्रुटि को निरस्त किया जा रहा था?

कोड है कि इस त्रुटि के कारण है:

Response.Redirect("Login.aspx", true); 

अगर मैं false करने के लिए bool मूल्य बदलने के लिए, त्रुटि लॉग खाली हो जाता है और यह त्रुटि फिर आ रहा बंद हो जाता है, लेकिन कार्यक्रम काम करना बंद।

अगर मैं इसे इस तरह रखता हूं, तो मुझे यह त्रुटि उपद्रव की तरह मिल रही है।

endResponse पैरामीटर के मान के रूप में Response.Redirect का उपयोग करने के विकल्प को मैं जानना चाहता हूं।

+2

देखें http://msdn.microsoft.com/en-us/library/a8wa7sdt(VS.80).aspx – Mike

+1

विरोध करें। रीडायरेक्ट प्रतिक्रिया को आंतरिक रूप से कॉल करेगा। आंतरिक रूप से, इसे 'झूठी' का उपयोग करके दबाया जा सकता है (Response.Redirect (Login.aspx, false);) लेकिन यह प्रोग्राम को काम करना बंद नहीं कर सकता है। – wizzardz

+1

यह प्रोग्राम को काम करने से रोक सकता है अगर अन्य तर्क को रीडायरेक्ट के बाद संसाधित किया जा रहा है जो अपवाद उठाए जाने पर अन्यथा संसाधित नहीं किया जाएगा। –

उत्तर

17

मैं इस अपवाद को पकड़ने और क्योंकि ASP.NET प्रवाह नियंत्रण के लिए के बजाय एक असाधारण परिस्थिति के लिए अपवाद उपयोग कर रहा है यह निगल।

try 
{ 
    // Do stuff. 
} 
catch(ThreadAbortException) 
{ 
    // Do nothing. ASP.NET is redirecting. 
    // Always comment this so other developers know why the exception 
    // is being swallowed. 
} 
catch(OtherExceptionTypes ex) 
{ 
    // Log other types of exception. 
} 
+0

अगर मैं सामान्य अपवाद के बजाय थ्रेड अपवाद का उपयोग करता हूं तो त्रुटि लॉग में क्या मुद्रित किया जाएगा? –

+0

यदि आप अपवाद को पकड़ते हैं और निगलते हैं तो कुछ भी नहीं, क्योंकि उस बिंदु पर कोई अपवाद नहीं होता है जहां यह लॉग हो जाता है। यह भी लगता है कि आपको अपवादों के काम पर भी पढ़ने की जरूरत है। –

+0

क्षमा करें, मैंने स्थापित नहीं किया था।मेरे घर प्रणाली में नेट। तो मैं एक शक में था। –

2

आप इस Response.Redirect ("Login.aspx", गलत) की तरह बदल सकते हैं तो यह अभ्यस्त गर्भपात।

3

रूप Response.Redirect(url) ThreadAbortException समाधान में कहा गया है:

जब आप Response.Redirect(url) क्योंकि इस प्रणाली वर्तमान वेब पेज धागा के प्रसंस्करण रोकता यह प्रतिक्रिया रीडायरेक्ट भेजने के बाद करने के लिए एक फोन करना ThreadAbortException फेंक दिया जाता है धारा। Response.Redirect(url) वास्तव में Response.End() आंतरिक रूप से कॉल करता है, और यह Response.End() है जो Thread.Abort() पर कॉल करता है जो थ्रेड को समाप्त करने के लिए स्टैक को बुलबुले करता है। दुर्लभ परिस्थितियों में Response.End() को कॉल वास्तव में Thread.Abort() फोन नहीं है, लेकिन बजाय HttpApplication.CompleteRequest() कहता है।

या बस कोशिश करें/कैच ब्लॉक से Response.Redirect("~/Membership/UserRegistration.aspx"); स्थानांतरित करें।

1

सभी पकड़ा त्रुटियों जहां रीडायरेक्ट करने के लिए, बनाने के लिए एक 'गोटो' कोशिश पकड़ने से बाहर किस्मत में इस प्रकार है:

Try 

     'do stuff 

    Catch ex As Exception 

     'logging 
     GoTo MyRedirection 

    End Try 

    'Prevent redirection in case of no errors 
    Exit Sub 

MyRedirection: 
    Response.Redirect("login.aspx", True) 

यह न धागा गर्भपात का कारण बनता है और न ही कई कैच की आवश्यकता है।

संबंधित मुद्दे

 संबंधित मुद्दे