public async Task <Application> Show(Type appType, ApplicationOptions opts = null) { LogSharp.Debug("UrhoSurface: Show."); await waitWhileSuperviewIsNullTaskSource.Task; UrhoPlatformInitializer.DefaultInit(); await Task.Yield(); paused = false; opts = opts ?? new ApplicationOptions(); LogSharp.Debug("UrhoSurface: Show. Wait semaphore."); await Semaphore.WaitAsync(); //await Stop(); if (Application.HasCurrent) { await Application.Current.Exit(); } await Task.Yield(); SDL_SetExternalViewPlaceholder(Handle, Window.Handle); Hidden = true; var app = Application.CreateInstance(appType, opts); Application = app; app.Run(); Semaphore.Release(); await Application.ToMainThreadAsync(); InvokeOnMainThread(() => Hidden = false); LogSharp.Debug("UrhoSurface: Finished."); return(app); }
public static void StopRendering(Application app) { LogSharp.Debug("UrhoSurface: StopRendering."); Resume(); if (Application.HasCurrent && Application.Current.Graphics?.IsDeleted != true) { var window = Application.Current.Graphics.SdlWindow; if (window != IntPtr.Zero) { LogSharp.Debug("UrhoSurface: UIKit_StopRenderLoop."); UIKit_StopRenderLoop(window); } } LogSharp.Debug("UrhoSurface: Finished."); }
public async Task Stop() { LogSharp.Debug("UrhoSurface: Stop."); if (Application == null || !Application.IsActive) { return; } LogSharp.Debug("UrhoSurface: Stop. Wait semaphore."); await ExitSemaphore.WaitAsync(); LogSharp.Debug("UrhoSurface: Stop. Exiting..."); await Application.Exit(); LogSharp.Debug("UrhoSurface: Stop. Removing subviews..."); foreach (var view in Subviews) { view.RemoveFromSuperview(); } ExitSemaphore.Release(); LogSharp.Debug("UrhoSurface: Stop. Finished."); }