diff --git a/native/Avalonia.Native/inc/avalonia-native.h b/native/Avalonia.Native/inc/avalonia-native.h index 677fa2f4c5..48822c66ce 100644 --- a/native/Avalonia.Native/inc/avalonia-native.h +++ b/native/Avalonia.Native/inc/avalonia-native.h @@ -308,6 +308,7 @@ AVNCOM(IAvnPlatformThreadingInterface, 0b) : IUnknown // Can't pass int* to sharpgentools for some reason virtual void Signal(int priority) = 0; virtual IUnknown* StartTimer(int priority, int ms, IAvnActionCallback* callback) = 0; + virtual HRESULT TerminateApp () = 0; }; AVNCOM(IAvnSystemDialogEvents, 0c) : IUnknown diff --git a/native/Avalonia.Native/src/OSX/platformthreading.mm b/native/Avalonia.Native/src/OSX/platformthreading.mm index e7abedae51..596106c6dc 100644 --- a/native/Avalonia.Native/src/OSX/platformthreading.mm +++ b/native/Avalonia.Native/src/OSX/platformthreading.mm @@ -138,6 +138,12 @@ public: return new TimerWrapper(callback, ms); } } + + virtual HRESULT TerminateApp () override + { + [NSApp stop:0]; + return S_OK; + } }; @implementation Signaler diff --git a/src/Avalonia.Native/CallbackBase.cs b/src/Avalonia.Native/CallbackBase.cs index 0e69bec9cc..1356dd58ff 100644 --- a/src/Avalonia.Native/CallbackBase.cs +++ b/src/Avalonia.Native/CallbackBase.cs @@ -4,6 +4,7 @@ using System; using System.Runtime.ExceptionServices; using SharpGen.Runtime; +using Avalonia.Platform; namespace Avalonia.Native { @@ -80,11 +81,12 @@ namespace Avalonia.Native public void RaiseException(Exception e) { - var threadingInterface = AvaloniaLocator.Current.GetService(); - - threadingInterface.TerminateNativeApp(); + if (AvaloniaLocator.Current.GetService() is PlatformThreadingInterface threadingInterface) + { + threadingInterface.TerminateNativeApp(); - threadingInterface.DispatchException(ExceptionDispatchInfo.Capture(e)); + threadingInterface.DispatchException(ExceptionDispatchInfo.Capture(e)); + } } } } diff --git a/src/Avalonia.Native/PlatformThreadingInterface.cs b/src/Avalonia.Native/PlatformThreadingInterface.cs index ddde4b2837..4c70a71772 100644 --- a/src/Avalonia.Native/PlatformThreadingInterface.cs +++ b/src/Avalonia.Native/PlatformThreadingInterface.cs @@ -99,7 +99,7 @@ namespace Avalonia.Native public void TerminateNativeApp() { - + _native.TerminateApp(); } public void Signal(DispatcherPriority priority)