Browse Source

Working exception dispatch

pull/3451/head
Dan Walmsley 6 years ago
parent
commit
c3fb152597
  1. 1
      native/Avalonia.Native/inc/avalonia-native.h
  2. 6
      native/Avalonia.Native/src/OSX/platformthreading.mm
  3. 10
      src/Avalonia.Native/CallbackBase.cs
  4. 2
      src/Avalonia.Native/PlatformThreadingInterface.cs

1
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

6
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

10
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<PlatformThreadingInterface>();
threadingInterface.TerminateNativeApp();
if (AvaloniaLocator.Current.GetService<IPlatformThreadingInterface>() is PlatformThreadingInterface threadingInterface)
{
threadingInterface.TerminateNativeApp();
threadingInterface.DispatchException(ExceptionDispatchInfo.Capture(e));
threadingInterface.DispatchException(ExceptionDispatchInfo.Capture(e));
}
}
}
}

2
src/Avalonia.Native/PlatformThreadingInterface.cs

@ -99,7 +99,7 @@ namespace Avalonia.Native
public void TerminateNativeApp()
{
_native.TerminateApp();
}
public void Signal(DispatcherPriority priority)

Loading…
Cancel
Save