void OnShutdownAttempted(IGuardClose guard, ChildWindow view, CancelEventArgs e) { if (actuallyClosing) { actuallyClosing = false; return; } bool runningAsync = false, shouldEnd = false; guard.CanClose(canClose => { if (runningAsync && canClose) { actuallyClosing = true; view.Close(); } else { e.Cancel = !canClose; } shouldEnd = true; }); if (shouldEnd) { return; } runningAsync = e.Cancel = true; }
void OnShutdownAttempted(IGuardClose guard, Window view, CancelEventArgs e) { if (actuallyClosing) { actuallyClosing = false; return; } bool runningAsync = false, shouldEnd = false; guard.CanClose(canClose => { if (runningAsync && canClose) { actuallyClosing = true; view.Close(); } else e.Cancel = !canClose; shouldEnd = true; }); if (shouldEnd) return; runningAsync = e.Cancel = true; }