예제 #1
0
        /// <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);
            }
        }
예제 #2
0
        /// <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;
        }
예제 #3
0
 /// <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);
 }