سؤال

عند العمل على مشاريع ASP.NET 1.1 كنت أستخدم دائمًا ملف Global.asax لاكتشاف كافة الأخطاء.أنا أبحث عن طريقة مماثلة لالتقاط كافة الاستثناءات في عنصر تحكم مستخدم Windows Forms، والذي ينتهي به الأمر إلى أن يصبح عنصر تحكم IE مستضافًا.ما هي الطريقة الصحيحة للقيام بشيء مثل هذا؟

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

المحلول

تحتاج إلى التعامل مع System.Windows.Forms.Application.ThreadException حدث لنماذج Windows.لقد ساعدني هذا المقال حقًا: http://bytes.com/forum/thread236199.html.

نصائح أخرى

يوجد حاليًا في تطبيق winforms الخاص بي معالجات لـ Application.ThreadException, ، كما سبق، ولكن أيضا AppDomain.CurrentDomain.UnhandledException

معظم الاستثناءات تصل عبر ThreadException معالج، ولكن AppDomain واحد قد اكتشف أيضًا عددًا قليلاً من تجربتي

إذا كنت تستخدم VB.NET، فيمكنك النقر على ApplicationEvents.vb المريح للغاية.يأتي هذا الملف مجانًا مع مشروع VB.NET WinForms ويحتوي على طريقة للتعامل معه الاستثناءات غير المعالجة.

للوصول إلى هذا الملف الأنيق، اختر "خصائص المشروع >> التطبيق >> أحداث التطبيق"

إذا كنت لا تستخدم VB.NET، فنعم، يمكنك التعامل معه Application.ThreadException.

للتعامل مع الاستثناءات عالميًا...

تطبيق ويندوز

حدث System.Windows.Forms.Application.ThreadException

تستخدم عادة في الطريقة الرئيسية.يشير إلى استثناء مؤشر ترابط MSDN

أسب.نت

حدث System.Web.HttpApplication.Error

يُستخدم عادةً في ملف Global.asax.يشير إلى معالجات MSDN Global.asax العالمية

استمارة القنصلية

حدث System.AppDomain.UnhandledException

تستخدم عادة في الطريقة الرئيسية.يشير إلى MSDN UnhandledException

الكود من MSDN: http://msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception.aspx?cs-save-lang=1&cs-lang=vb#code-snippet-2

Sub Main()
  Dim currentDomain As AppDomain = AppDomain.CurrentDomain
  AddHandler currentDomain.UnhandledException, AddressOf MyHandler

  Try 
     Throw New Exception("1")
  Catch e As Exception
     Console.WriteLine("Catch clause caught : " + e.Message)
     Console.WriteLine()
  End Try 

  Throw New Exception("2")
End Sub 

Sub MyHandler(sender As Object, args As UnhandledExceptionEventArgs)
  Dim e As Exception = DirectCast(args.ExceptionObject, Exception)
  Console.WriteLine("MyHandler caught : " + e.Message)
  Console.WriteLine("Runtime terminating: {0}", args.IsTerminating)
End Sub 
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top