/// <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; }