معالجة الاستثناءات العالمية للتحكم في winforms
-
08-06-2019 - |
سؤال
عند العمل على مشاريع 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