protected override void OnClosing(CancelEventArgs e) { if (_actuallyClosing) { _actuallyClosing = false; return; } if (_deferredClosing) { return; } base.OnClosing(e); var closingEventArgs = new ClosingEventArgs() { Cancel = e.Cancel }; var deferredEvent = Closing.InvokeAsync(this, closingEventArgs); if (deferredEvent.IsCompleted) { e.Cancel = closingEventArgs.Cancel; } else { e.Cancel = true; _deferredClosing = true; DeferredClose(deferredEvent, closingEventArgs); } }