/// <summary> /// 执行异步委托 /// </summary> /// <param name="asynWaitPara">异步等待执行参数</param> /// <param name="containerControl">容器控件</param> public override void Excute(PartAsynWaitPara <T, TResult> asynWaitPara, TContainer containerControl) { if (asynWaitPara.AsynWait == null) { PartAsynUIParaProxy.SetAsynWait(asynWaitPara, this.CreateAsynWaitShadeControl(_shadeType, asynWaitPara)); } if (asynWaitPara.Islock) { return; } lock (asynWaitPara.SyncRoot) { if (asynWaitPara.Islock) { return; } PartAsynUIParaProxy.Lock(asynWaitPara); } var container = containerControl as Control; this._asynWaitPara = asynWaitPara; this._containerControl = container; WinformPartAsynExcuteHelper.DisableControls(container, this._asynModifyControls); //设置遮罩层控件 asynWaitPara.AsynWait.ShadeBackground = PartAsynExcuteFactoryWinform.ConvertShadeBackground(asynWaitPara.AsynWaitBackground); this.SetShadeControl(container, (Control)asynWaitPara.AsynWait); //启动执行线程 base.StartAsynExcuteThread(); }
/// <summary> /// 异步等待 /// </summary> /// <typeparam name="T">异步执行参数类型</typeparam> /// <typeparam name="TResult">异步执行返回值类型</typeparam> ///<param name="asynWaitPara">异步等待执行参数</param> ///<param name="containerControl">容器控件</param> ///<param name="asynWait">异步等待UI</param> public static void Wait <T, TResult>(PartAsynWaitPara <T, TResult> asynWaitPara, System.Windows.Controls.Panel containerControl, IPartAsynWait asynWait) { ParaValidate(asynWaitPara, containerControl); var asynExcute = _partAsynExcuteFactory.CreateExcute <T, System.Windows.Controls.Panel, TResult>(); PartAsynUIParaProxy.SetAsynWait(asynWaitPara, asynWait); asynExcute.Excute(asynWaitPara, containerControl); }
/// <summary> /// 异步等待 /// </summary> /// <typeparam name="T">异步执行参数类型</typeparam> /// <typeparam name="TResult">异步执行返回值类型</typeparam> ///<param name="asynWaitPara">异步等待执行参数</param> ///<param name="containerControl">容器控件</param> ///<param name="asynWait">异步等待UI</param> ///<param name="hasWinformControl">容器控件中是否含有Winform的子控件[true:有;false:没有]</param> public static void Wait <T, TResult>(PartAsynWaitPara <T, TResult> asynWaitPara, UIElement containerControl, IPartAsynWait asynWait, bool hasWinformControl = false) { ParaValidate(asynWaitPara, containerControl); var asynExcute = (WPFAsynExcuteAbs <T, UIElement, TResult>)_partAsynExcuteFactory.CreateExcute <T, UIElement, TResult>(); asynExcute.HasWinformControl = hasWinformControl; PartAsynUIParaProxy.SetAsynWait(asynWaitPara, asynWait); asynExcute.Excute(asynWaitPara, containerControl); }
/// <summary> /// 执行异步委托 /// </summary> /// <param name="asynWaitPara">异步等待执行参数</param> /// <param name="containerControl">容器控件</param> public override void Excute(PartAsynWaitPara <T, TResult> asynWaitPara, TContainer containerControl) { if (asynWaitPara.AsynWait == null) { PartAsynUIParaProxy.SetAsynWait(asynWaitPara, this.CreateAsynWaitShadeControl(_shadeType, asynWaitPara)); } if (asynWaitPara.Islock) { return; } lock (asynWaitPara.SyncRoot) { if (asynWaitPara.Islock) { return; } PartAsynUIParaProxy.Lock(asynWaitPara); } var container = containerControl as Control; this._asynWaitPara = asynWaitPara; this._containerControl = container; //设置遮罩层控件 asynWaitPara.AsynWait.ShadeBackground = PartAsynExcuteFactoryWinform.ConvertShadeBackground(asynWaitPara.AsynWaitBackground); //添加遮罩层控件 this._shadeControl = new UtilZ.Dotnet.WindowsDesktopEx.Winform.Controls.OpacityPanel(); this._shadeControl.Dock = DockStyle.Fill; container.Controls.Add(this._shadeControl); container.Controls.SetChildIndex(this._shadeControl, 0); var asynWaitControl = (Control)asynWaitPara.AsynWait; asynWaitControl.Anchor = AnchorStyles.None; asynWaitControl.Location = new System.Drawing.Point((container.Width - asynWaitControl.Width) / 2, (container.Height - asynWaitControl.Height) / 2); container.Controls.Add(asynWaitControl); container.Controls.SetChildIndex(asynWaitControl, 0); //禁用容器控件内的子控件的Tab焦点选中功能 WinformPartAsynExcuteHelper.DisableTab(container, this._asynModifyControls); //启动执行线程 base.StartAsynExcuteThread(); }
/// <summary> /// 执行异步委托 /// </summary> /// <param name="asynWaitPara">异步等待执行参数</param> /// <param name="containerControl">容器控件</param> public override void Excute(PartAsynWaitPara <T, TResult> asynWaitPara, TContainer containerControl) { if (asynWaitPara.AsynWait == null) { PartAsynUIParaProxy.SetAsynWait(asynWaitPara, this.CreateAsynWaitShadeControl(_shadeType, asynWaitPara)); } if (asynWaitPara.Islock) { return; } lock (asynWaitPara.SyncRoot) { if (asynWaitPara.Islock) { return; } PartAsynUIParaProxy.Lock(asynWaitPara); } var container = containerControl as Control; this._asynWaitPara = asynWaitPara; this._containerControl = container; //禁用容器控件内的子控件的Tab焦点选中功能 WinformPartAsynExcuteHelper.DisableTab(container, this._asynModifyControls); //设置遮罩层控件 asynWaitPara.AsynWait.ShadeBackground = PartAsynExcuteFactoryWinform.ConvertShadeBackground(asynWaitPara.AsynWaitBackground); //添加遮罩层控件 var shadeControl = (Control)asynWaitPara.AsynWait; shadeControl.Dock = DockStyle.Fill; this.SetShadeBackgroundImg(container, shadeControl); container.Controls.Add(shadeControl); //设置遮罩层控件在最上层 container.Controls.SetChildIndex(shadeControl, 0); container.SizeChanged += containerControl_SizeChanged; //启动执行线程 base.StartAsynExcuteThread(); }
/// <summary> /// 执行异步委托 /// </summary> /// <param name="asynWaitPara">异步等待执行参数</param> /// <param name="containerControl">容器控件</param> public override void Excute(PartAsynWaitPara <T, TResult> asynWaitPara, TContainer containerControl) { if (asynWaitPara.AsynWait == null) { PartAsynUIParaProxy.SetAsynWait(asynWaitPara, this.CreateAsynWaitShadeControl(_shadeType, asynWaitPara)); } var container = containerControl as UIElement; if (container == null) { throw new ArgumentException($"容器元素类型{containerControl.GetType().FullName}不是{typeof(UIElement).FullName}子类"); } if (asynWaitPara.Islock) { return; } lock (asynWaitPara.SyncRoot) { if (asynWaitPara.Islock) { return; } PartAsynUIParaProxy.Lock(asynWaitPara); } this._asynWaitPara = asynWaitPara; //设置遮罩层控件 asynWaitPara.AsynWait.ShadeBackground = PartAsynExcuteFactoryWPF.ConvertShadeBackground(asynWaitPara.AsynWaitBackground); this.AddAsynWaitControl((FrameworkElement)asynWaitPara.AsynWait, container); //启动执行线程 base.StartAsynExcuteThread(); }