bool CreateDialogForm() { if (collector.ProgressMonitorIsDisposed) { return(false); } dlg = new AsynchronousWaitDialogForm(cancellation != null); dlg.Text = titleName; dlg.cancelButton.Click += CancelButtonClick; dlg.CreateControl(); IntPtr h = dlg.Handle; // force handle creation // ensure events occur on this thread, then register event handlers synchronizationHelper.SetTarget(dlg); collector.ProgressMonitorDisposed += progress_ProgressMonitorDisposed; collector.PropertyChanged += progress_PropertyChanged; // check IsDisposed once again (we might have missed an event while we initialized the dialog): if (collector.ProgressMonitorIsDisposed) { dlg.Dispose(); return(false); } progress_PropertyChanged(null, new System.ComponentModel.PropertyChangedEventArgs("TaskName")); return(true); }