private void ExecuteAsyncWithWait(Action method, AutoResetEvent cancelEvent, string message) { StartScreenForm form = new StartScreenForm(cancelEvent, message); method.BeginInvoke(ar => { try { Win32Util.ExecuteOrInvoke(form, form.Close); method.EndInvoke(ar); } catch (Exception ex) { Win32Util.ShowError(this, "Не удалось выполнить операцию. Описание ошибки приведено далее. \r\n" + ex.Message + "\r\n" + ex.StackTrace); } }, null); if (form.ShowDialog() == DialogResult.Cancel && cancelEvent != null) { cancelEvent.Set(); } }