コード例 #1
0
        /// <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();
        }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
        /// <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);
        }
コード例 #4
0
        /// <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();
        }
コード例 #5
0
        /// <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();
        }
コード例 #6
0
 /// <summary>
 /// 释放异步委托资源
 /// </summary>
 private void ReleaseResource()
 {
     try
     {
         PartAsynUIParaProxy.UnLock(this._asynWaitPara);
         this._asynWaitPara.AsynWait.CanceledNotify -= CancellExcute;
         this._asynWaitPara.AsynWait.StopAnimation();
         AsynExcuteCancellHelper.RemoveAsynExcuteCancell(this);
         this._asynExcuteThreadCts.Dispose();
         this._asynExcuteThreadCts = null;
         this.PrimitiveReleseResource();
     }
     catch (Exception ex)
     {
         Loger.Error(ex);
     }
 }
コード例 #7
0
        /// <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();
        }