diff --git a/src/Avalonia.Native/CallbackBase.cs b/src/Avalonia.Native/CallbackBase.cs index 84eff35b30..0e69bec9cc 100644 --- a/src/Avalonia.Native/CallbackBase.cs +++ b/src/Avalonia.Native/CallbackBase.cs @@ -80,9 +80,11 @@ namespace Avalonia.Native public void RaiseException(Exception e) { - var exceptionInfo = ExceptionDispatchInfo.Capture(e); + var threadingInterface = AvaloniaLocator.Current.GetService(); - PlatformThreadingInterface.s_exceptionDispatchInfo = exceptionInfo; + threadingInterface.TerminateNativeApp(); + + threadingInterface.DispatchException(ExceptionDispatchInfo.Capture(e)); } } } diff --git a/src/Avalonia.Native/PlatformThreadingInterface.cs b/src/Avalonia.Native/PlatformThreadingInterface.cs index 000c7a62cf..ddde4b2837 100644 --- a/src/Avalonia.Native/PlatformThreadingInterface.cs +++ b/src/Avalonia.Native/PlatformThreadingInterface.cs @@ -13,8 +13,6 @@ namespace Avalonia.Native { public class PlatformThreadingInterface : IPlatformThreadingInterface { - public static ExceptionDispatchInfo s_exceptionDispatchInfo; - class TimerCallback : CallbackBase, IAvnActionCallback { readonly Action _tick; @@ -46,6 +44,7 @@ namespace Avalonia.Native } readonly IAvnPlatformThreadingInterface _native; + private ExceptionDispatchInfo _exceptionDispatchInfo; public PlatformThreadingInterface(IAvnPlatformThreadingInterface native) { @@ -86,15 +85,23 @@ namespace Avalonia.Native } } - if(s_exceptionDispatchInfo != null) + if(_exceptionDispatchInfo != null) { - // TODO terminate NSApp. - - s_exceptionDispatchInfo.Throw(); + _exceptionDispatchInfo.Throw(); } } } + public void DispatchException (ExceptionDispatchInfo exceptionInfo) + { + _exceptionDispatchInfo = exceptionInfo; + } + + public void TerminateNativeApp() + { + + } + public void Signal(DispatcherPriority priority) { _native.Signal((int)priority);