سؤال

ولدي تطبيق وحدة مكتوب في C # /. NET التي أريد أن تشغيلها من البرنامج نصي (نانت). إذا حدث استثناء في تطبيق وحدة التحكم، وأود نانت على الاستمرار، ولكن في ويندوز فيستا هناك منبثقة الذي يبحث عن حلول ويسأل عن غيرها التصحيح.

وأود أن تجنب المنبثقة مع "توقف برنامج العمل" عندما يحدث استثناء في تطبيق وحدة التحكم. كيف يمكنني السيطرة على هذا من C # /. NET؟

و(A سؤال مماثل يتناول القضية للغة C ، ولكن أود حل لC # /. NET).

و(توضيح: أود استثناء لتمريرها إلى نانت، ولكن بدون المنبثقة).

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

المحلول

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

لتجنب ذلك، يمكنك التعامل مع AppDomain.CurrentDomain.UnhandledException الحدث ومجرد دعوة Environment.Exit(1) للخروج برشاقة .

وهذا سوف تتعامل مع جميع الاستثناءات على جميع المواضيع داخل AppDomain الخاص بك. إلا إذا كنت تفعل أي شيء خاص، التطبيق ربما لديها فقط AppDomain واحد، لذلك وضع هذا في طريقة public static void Main الخاص بك ينبغي أن يكون كافيا:

AppDomain.CurrentDomain.UnhandledException += (sender, args) =>
{
    Console.Error.WriteLine("Unhandled exception: " + args.ExceptionObject);
    Environment.Exit(1);
};

وربما يجب عليك استخدام مسجل نانت لكتابة الخطأ في هذه الحالة أيضا (لا أذكر API لهذا مرتجلا بالرغم من ذلك.)

ويمكنك أيضا تعطيل JIT التصحيح على الجهاز. أوصي هذا فقط في ظروف معينة مثل لخادم بناء مخصص.

نصائح أخرى

ومجرد تصفية الاستثناء وتسجيل / تجاهله.

ووالمنبثقة يبدو بسبب استثناء غير معالج. لتجنب ذلك تأكد من طريقة الرئيسي يلتقط كل الاستثناءات وتحويلها إلى بعض قطعة من المفيد الآخر من المعلومات يمكنك ان تلتقط. مجرد تجاهل استثناء غير مستحسن.

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

وتحت ويندوز فيستا يمكنك تعطيل هذا الحوار لprogramms الخاص بك.

وتعطيل "ميزة تقارير المشاكل والحلول". تجد أنه ضمن لوحة التحكم -> تقارير المشاكل وحلولها -> تغيير إعدادات -> إعدادات متقدمة -> إيقاف لبرامج بلدي، مشكلة التقارير

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

scroll top