هو محاولة / صيد في جميع أنحاء كله C # برنامج ممكن؟

StackOverflow https://stackoverflow.com/questions/1601372

سؤال

ويتم استدعاء برنامج C # بواسطة:

Application.Run (new formClass ());

وأود أن وضع حاول / catch حول كل شيء إلى اعتراض أي استثناءات uncaught. عندما وضعت في جميع أنحاء هذه الطريقة تشغيل، لا يتم اكتشاف الاستثناءات. السيطرة يعود فقط هنا عند إنهاء البرنامج بعد استثناء uncaught.

وأين يمكن أن أضع محاولة / صيد لتغطية برنامج كامل؟ شكرا!

هل كانت مفيدة؟

المحلول

لتصفية الاستثناءات غير معالج ويندوز نموذج ربط ما يصل إلى AppDomain.UnhandledException و <لأ href = "HTTP: // msdn.microsoft.com/en-us/library/system.windows.forms.application.threadexception.aspx "يختلط =" noreferrer "> الأحداث Application.ThreadException .

ومما يثير الاهتمام: أخطاء غير متوقعة في التطبيقات المدارة

نصائح أخرى

وأساسا، لا يمكنك التقاط كافة الاستثناءات عند استخدام عملية استضافة CLR الافتراضي. فترة. وذلك لأن AppDomain.UnhandledException الحدث هو الإعلام فقط لا يمكنك معالجة الاستثناء (وهو ما يعني أنه لا يمكنك منع التطبيق من يتم إنهاؤها بعد معالجة الإخطار).

ولكن، يمكنك التقاط ومعالجة كافة الاستثناءات في موضوع UI من تطبيق WinForms عناصر باستخدام لها <لأ href = "http://msdn.microsoft.com/en-us/library/system.windows.forms. application.threadexception.aspx "يختلط =" نوفولو noreferrer "> معالج Application.ThreadException (وو <لأ href =" http://msdn.microsoft.com/en-us/library/ms224249(default).aspx "يختلط = "نوفولو noreferrer"> التحكم في السلوك عبر <لأ href = "http://msdn.microsoft.com/en-us/library/system.windows.forms.unhandledexceptionmode.aspx" يختلط = "نوفولو noreferrer "> UnhandledExceptionMode ). والمواضيع الأخرى التي رمي استثناء لا يتم القبض من قبل هذا المعالج.

في عام، انها ليست فكرة جيدة لمحاولة التعامل مع جميع الاستثناءات. يمكنك، ومع ذلك، استخدم AppDomain.UnhandledException لتسجيل الخطأ و / أو تنفيذ مهام تنظيف الهامة (مثل اغلاق أسفل databaseor يستند إلى ملف أيا كان).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top