/// <summary> /// Execute a delegate on a separate thread and show a progress dialog /// </summary> /// <param name="target"> /// The target. /// </param> /// <param name="title"> /// The title. /// </param> /// <param name="text"> /// The text. /// </param> /// <param name="threadName"> /// The thread Name. /// </param> /// <param name="style"> /// The style. /// </param> /// <param name="logger"> /// The logger. /// </param> /// <param name="action"> /// The action. /// </param> /// <param name="exceptionHandler"> /// The exception Handler. /// </param> /// <param name="finalHandler"> /// The final Handler. /// </param> /// <param name="notifyErrorInMsgBox"> /// The notify Error In Msg Box. /// </param> /// <param name="visible"> /// The visible. /// </param> public static void ExecuteTask( IWin32Window target, string title, string text, string threadName, ProgressBarStyle style, ILogger logger, CallbackDelegate action, CallbackExceptionDelegate exceptionHandler, CallbackExceptionDelegate finalHandler, bool notifyErrorInMsgBox, bool visible) { using (var progressDialog = new ProgressDialog(title, text, style, true)) { if (!visible) { progressDialog.WindowState = FormWindowState.Minimized; } ThreadPool.QueueUserWorkItem( delegate (object param) { threadName = string.IsNullOrEmpty(threadName) ? title.Replace(" ", string.Empty) : threadName; AppUtil.NameCurrentThread(threadName); var callback = param as ProgressDialog; Exception actionException = null; try { action(callback); } catch (Exception ex) { actionException = ex; if (!callback.IsAborting) { if (logger != null) { string currentTitle = callback.Title; logger.Error((string.IsNullOrEmpty(currentTitle) ? null : currentTitle + ": ") + ex); if (notifyErrorInMsgBox) { ExMessageBox.Show( target, "An error occured: " + ex.Message, currentTitle, MessageBoxButtons.OK, MessageBoxIcon.Error); } } if (exceptionHandler != null) { exceptionHandler(callback, ex); } else { throw; } } } finally { if (callback != null) { callback.End(); } if (finalHandler != null) { finalHandler(callback, actionException); } } }, progressDialog); progressDialog.ShowDialog(target); } }
/// <summary> /// The execute task. /// </summary> /// <param name="title"> /// The title. /// </param> /// <param name="text"> /// The text. /// </param> /// <param name="threadName"> /// The thread name. /// </param> /// <param name="callback"> /// The callback. /// </param> /// <param name="logger"> /// The logger. /// </param> /// <param name="action"> /// The action. /// </param> /// <param name="exceptionHandler"> /// The exception handler. /// </param> /// <param name="finalHandler"> /// The final handler. /// </param> /// <param name="notifyError"> /// The notify error. /// </param> /// <returns> /// The <see cref="ThreadResult"/>. /// </returns> public static ThreadResult ExecuteTask( string title, string text, string threadName, IProgressCallback callback, ILogger logger, CallbackDelegate action, CallbackExceptionDelegate exceptionHandler, CallbackExceptionDelegate finalHandler, bool notifyError) { var result = DoWork( delegate { threadName = string.IsNullOrEmpty(threadName) ? title.Replace(" ", string.Empty) : threadName; AppUtil.NameCurrentThread(threadName); Exception actionException = null; try { action(callback); } catch (Exception ex) { actionException = ex; if (!callback.IsAborting) { if (logger != null) { string currentTitle = callback.Title; logger.Error((string.IsNullOrEmpty(currentTitle) ? null : currentTitle + ": ") + ex); if (notifyError) { callback.Inform(callback, "An error occured: " + ex.Message, currentTitle, NotificationType.Error); } } if (exceptionHandler != null) { exceptionHandler(callback, ex); } } } finally { if (callback != null) { callback.End(); } if (finalHandler != null) { finalHandler(callback, actionException); } } }, int.MaxValue, threadName, logger); return result; }
/// <summary> /// The execute task. /// </summary> /// <param name="target"> /// The target. /// </param> /// <param name="title"> /// The title. /// </param> /// <param name="text"> /// The text. /// </param> /// <param name="threadName"> /// The thread name. /// </param> /// <param name="style"> /// The style. /// </param> /// <param name="logger"> /// The logger. /// </param> /// <param name="action"> /// The action. /// </param> /// <param name="exceptionHandler"> /// The exception handler. /// </param> /// <param name="finalHandler"> /// The final handler. /// </param> public static void ExecuteTask( IWin32Window target, string title, string text, string threadName, ProgressBarStyle style, ILogger logger, CallbackDelegate action, CallbackExceptionDelegate exceptionHandler, CallbackExceptionDelegate finalHandler) { ExecuteTask(target, title, text, threadName, style, logger, action, exceptionHandler, finalHandler, true, true); }