Пример #1
0
        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);
            }
        }