Browse Source

Add methods for dispatching exceptions on osx.

pull/3451/head
Dan Walmsley 7 years ago
parent
commit
69c0521c5e
  1. 6
      src/Avalonia.Native/CallbackBase.cs
  2. 19
      src/Avalonia.Native/PlatformThreadingInterface.cs

6
src/Avalonia.Native/CallbackBase.cs

@ -80,9 +80,11 @@ namespace Avalonia.Native
public void RaiseException(Exception e) public void RaiseException(Exception e)
{ {
var exceptionInfo = ExceptionDispatchInfo.Capture(e); var threadingInterface = AvaloniaLocator.Current.GetService<PlatformThreadingInterface>();
PlatformThreadingInterface.s_exceptionDispatchInfo = exceptionInfo; threadingInterface.TerminateNativeApp();
threadingInterface.DispatchException(ExceptionDispatchInfo.Capture(e));
} }
} }
} }

19
src/Avalonia.Native/PlatformThreadingInterface.cs

@ -13,8 +13,6 @@ namespace Avalonia.Native
{ {
public class PlatformThreadingInterface : IPlatformThreadingInterface public class PlatformThreadingInterface : IPlatformThreadingInterface
{ {
public static ExceptionDispatchInfo s_exceptionDispatchInfo;
class TimerCallback : CallbackBase, IAvnActionCallback class TimerCallback : CallbackBase, IAvnActionCallback
{ {
readonly Action _tick; readonly Action _tick;
@ -46,6 +44,7 @@ namespace Avalonia.Native
} }
readonly IAvnPlatformThreadingInterface _native; readonly IAvnPlatformThreadingInterface _native;
private ExceptionDispatchInfo _exceptionDispatchInfo;
public PlatformThreadingInterface(IAvnPlatformThreadingInterface native) public PlatformThreadingInterface(IAvnPlatformThreadingInterface native)
{ {
@ -86,15 +85,23 @@ namespace Avalonia.Native
} }
} }
if(s_exceptionDispatchInfo != null) if(_exceptionDispatchInfo != null)
{ {
// TODO terminate NSApp. _exceptionDispatchInfo.Throw();
s_exceptionDispatchInfo.Throw();
} }
} }
} }
public void DispatchException (ExceptionDispatchInfo exceptionInfo)
{
_exceptionDispatchInfo = exceptionInfo;
}
public void TerminateNativeApp()
{
}
public void Signal(DispatcherPriority priority) public void Signal(DispatcherPriority priority)
{ {
_native.Signal((int)priority); _native.Signal((int)priority);

Loading…
Cancel
Save