From 69c0521c5ec115ed16a63362c39c27645edb5fa3 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Sun, 19 Jan 2020 19:51:36 -0300 Subject: [PATCH] Add methods for dispatching exceptions on osx. --- src/Avalonia.Native/CallbackBase.cs | 6 ++++-- .../PlatformThreadingInterface.cs | 19 +++++++++++++------ 2 files changed, 17 insertions(+), 8 deletions(-) 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);