コード例 #1
0
        /// <summary>
        ///     线程执行方法,不等待线程结束,线程结束后以非线程方式执行后续方法
        /// </summary>
        /// <param name="method">线程方法</param>
        /// <param name="nextMethod">后续非线程方法</param>
        /// <param name="showWaitLayer">是否显示等待层</param>
        /// <param name="control">需要遮罩的控件或窗体</param>
        /// <returns></returns>
        protected void ThreadExcuteNoLock(ThreadExcuteMethod method, ThreadExcuteMethod nextMethod = null,
                                          bool showWaitLayer = false, Control control = null)
        {
            TranslucentHelper tl = null;

            if (showWaitLayer)
            {
                if (control == null)
                {
                    control = this;
                }
                tl = TranslucentHelper.GenerateAndShowTranslucentLayer(control, 127, true);
            }
            //定义线程,使用匿名Lambda匿名委托
            var thread = new Thread(() =>
            {
                try
                {
                    //调用方法
                    method();
                }
                catch (Exception ex)
                {
                    //将线程异常信息放至父线程
                    MsgBox.ShowError(ex);
                }
                finally
                {
                    if (showWaitLayer && tl != null)
                    {
                        tl.HideTranslucentLayer();
                    }
                    if (nextMethod != null)
                    {
                        var invorker = new MethodInvoker(nextMethod);
                        BeginInvoke(invorker);
                    }
                }
            });

            //启动线程
            thread.Start();
            thread.IsBackground = true;
        }