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)
{
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 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);

Loading…
Cancel
Save