Daoting / dt

利用 C# + XAML 进行快速业务开发的跨平台框架(搬运工)
https://github.com/daoting/dt
56 stars 13 forks source link

全局未处理异常事件 #1

Closed Daoting closed 1 year ago

Daoting commented 2 years ago
  1. 升级.net6 + winui后android和ios上原有的未处理异常事件始终不触发!

  2. winui 的 Application.Current.UnhandledException无法识别异常类型,并且在异步中抛出异常时直接退出,造成KnownException 业务异常无法在OnUnhandledException 中识别,无解!已提交:https://github.com/microsoft/CsWinRT/issues/1192

  3. 使用AppDomain.CurrentDomain.FirstChanceException捕获的事件太多,也无法标记已处理!

  4. 涉及文件Kit-init.cs,样例NotifyDemo.xaml

  5. 只能等待maui添加全局未处理异常事件,已订阅maui的问题

Daoting commented 2 years ago

App.UnhandledException fix will be available in Windows App SDK 1.2 Preview 2.

Daoting commented 2 years ago

/// .net6.0 maui抛异常规律: /// 1. UI主线程同步方法中抛异常被.net内部拦截,不触发未处理异常事件 /// 2. UI主线程异步方法中抛异常,触发未处理异常事件 /// 3. Task内部异常,不管同步或异步都不触发未处理异常事件 /// 因为触发未处理异常事件的不确定性,无法统一处理,警告提示信息只能在抛出异常前显示 /// .net6.0 maui中非KnownException类型的异常,在UI同步方法或后台抛出时都无法捕获!

win问题:UI主线程异步异常造成崩溃、后台未处理异常不能提醒,V1.2 preview2解决 iOS问题:UI主线程异步方法中抛异常,调试时不崩溃,正式运行时崩溃,无法解决

Daoting commented 1 year ago

.net7.0 maui抛异常规律:

  1. UI主线程同步方法中抛异常被.net内部拦截处理,不触发未处理异常事件
  2. UI主线程异步方法中抛异常,触发未处理异常事件
  3. Task内部异常,不管同步或异步都不触发未处理异常事件 因为触发未处理异常事件的不确定性,要想统一提供警告提示信息,只能在抛出KnownException异常前显示

WinAppSdk V1.2 都能触发未处理异常事件,已完美解决崩溃问题

总结:所有平台都不会因为异常而崩溃,对于maui上的非KnownException类型异常,在UI同步方法或后台抛出时无法给出警告提示!