Example #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();
        }
Example #2
0
        private void tsmiGenerateModel_Click(object sender, EventArgs e)
        {
            var tableInfoArr = this._tableList.Where(t => { return(t.ShowField); }).ToArray();

            if (tableInfoArr.Length == 0)
            {
                return;
            }

            var frm = new FModelInfo();

            if (frm.ShowDialog() != DialogResult.OK)
            {
                return;
            }

            var para = new PartAsynWaitPara <Tuple <string, string, string, DBTableInfoEx[]>, object>();

            para.Caption      = "生成model结构";
            para.IsShowCancel = false;
            para.Para         = new Tuple <string, string, string, DBTableInfoEx[]>(frm.Namespace, frm.BaseClassName, frm.Dir, tableInfoArr);
            para.Function     = this.GenerateModel;

            para.Completed = (ret) =>
            {
                if (ret.Status == PartAsynExcuteStatus.Exception)
                {
                    Loger.Error(ret.Exception);
                }
            };

            PartAsynWaitHelper.Wait(para, this);
        }
Example #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>
        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);
        }
Example #4
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);
        }
        private void TestAsynWait()
        {
            var para = new PartAsynWaitPara <int, string>();

            para.Para     = 100;
            para.Title    = "测试这个控件";
            para.Function = (inp) =>
            {
                for (int i = 0; i < inp.Para; i++)
                {
                    inp.AsynWait.Message = string.Format("正在处理:{0}项..", i);
                    Thread.Sleep(500);
                    if (inp.Token.IsCancellationRequested)
                    {
                        break;
                    }

                    //if (i > 5)
                    //{
                    //    throw new NotSupportedException("XXX");
                    //}
                }

                return("OK");
            };
            para.ShowCancel         = true;
            para.AsynWaitBackground = Brushes.Red;
            para.Completed          = (p) =>
            {
                string str;
                switch (p.Status)
                {
                case PartAsynExcuteStatus.Completed:
                    str = p.Result;
                    break;

                case PartAsynExcuteStatus.Exception:
                    str = p.Exception.Message;
                    break;

                case PartAsynExcuteStatus.Cancel:
                    str = "Cancel";
                    break;

                default:
                    str = "none";
                    break;
                }

                MessageBox.Show(str);
            };

            WPFPartAsynWaitHelper.Wait(para, this);
        }
        /// <summary>
        /// 异步等待
        /// </summary>
        /// <typeparam name="T">异步执行参数类型</typeparam>
        /// <typeparam name="TContainer">容器控件类型</typeparam>
        /// <typeparam name="TResult">异步执行返回值类型</typeparam>
        ///<param name="asynWaitPara">异步等待执行参数</param>
        ///<param name="containerControl">容器控件</param>
        ///<param name="asynWait">异步等待UI</param>
        ///<param name="asynExcute">异步执行</param>
        public static void Wait <T, TContainer, TResult>(PartAsynWaitPara <T, TResult> asynWaitPara, TContainer containerControl, IPartAsynWait asynWait, IAsynExcute <T, TContainer, TResult> asynExcute)
        {
            ParaValidate(asynWaitPara, containerControl);
            if (asynExcute == null)
            {
                throw new ArgumentNullException("asynExcute");
            }

            asynWaitPara.AsynWait = asynWait;
            asynExcute.Excute(asynWaitPara, containerControl);
        }
        private void btnTestAsynWait_Click(object sender, EventArgs e)
        {
            var para = new PartAsynWaitPara <int, string>();

            para.Para     = 10;
            para.Function = (inp) =>
            {
                for (int i = 0; i < inp.Para; i++)
                {
                    inp.AsynWait.Message = string.Format("正在处理:{0}项..", i);
                    Thread.Sleep(500);
                    if (inp.Token.IsCancellationRequested)
                    {
                        break;
                    }

                    if (i > 5)
                    {
                        throw new NotSupportedException("XXX");
                    }
                }

                return("OK");
            };
            para.ShowCancel         = true;
            para.AsynWaitBackground = Color.Red;
            para.Completed          = (p) =>
            {
                string str;
                switch (p.Status)
                {
                case PartAsynExcuteStatus.Completed:
                    str = p.Result;
                    break;

                case PartAsynExcuteStatus.Exception:
                    str = p.Exception.Message;
                    break;

                case PartAsynExcuteStatus.Cancel:
                    str = "Cancel";
                    break;

                default:
                    str = "none";
                    break;
                }

                MessageBox.Show(this, str);
            };

            WinformPartAsynWaitHelper.Wait(para, this);
        }
        /// <summary>
        /// 参数验证
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <typeparam name="TResult"></typeparam>
        /// <param name="asynWaitPara"></param>
        /// <param name="containerControl"></param>
        protected static void ParaValidate <T, TResult>(PartAsynWaitPara <T, TResult> asynWaitPara, object containerControl)
        {
            if (asynWaitPara == null)
            {
                throw new ArgumentNullException("asynWaitPara");
            }

            if (containerControl == null)
            {
                throw new ArgumentNullException("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>
        public static void Cancel <T, TResult>(PartAsynWaitPara <T, TResult> asynWaitPara)
        {
            if (asynWaitPara == null)
            {
                return;
            }

            var asynWait = asynWaitPara.AsynWait;

            if (asynWait == null)
            {
                return;
            }

            asynWait.Cancel();
        }
        /// <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();
        }
Example #12
0
        private void btnLoad_Click(object sender, EventArgs e)
        {
            try
            {
                var dbConfig = DropdownBoxHelper.GetGenericFromComboBox <DatabaseConfig>(comboBoxDB);
                var para     = new PartAsynWaitPara <DatabaseConfig, object>();
                para.Caption      = "查询数据库结构";
                para.IsShowCancel = false;
                para.Para         = dbConfig;
                para.Function     = (p) =>
                {
                    p.AsynWait.Hint = $"正在查询数据库[{dbConfig.ConName}]结构,请稍候...";
                    IDBAccess dbAccess = DBAccessManager.GetDBAccessInstance(p.Para.DBID);
                    this._tableList = dbAccess.Database.GetTableInfoList(true).OrderBy(t => { return(t.Name); }).Select(t => { return(new DBTableInfoEx(t)); }).ToList();
                    if (p.AsynWait.InvokeRequired)
                    {
                        p.AsynWait.Invoke(new Action(() =>
                        {
                            this._tableBindingList.Clear();
                            this._tableBindingList.AddRange(this._tableList);
                        }));
                    }
                    else
                    {
                        this._tableBindingList.Clear();
                        this._tableBindingList.AddRange(this._tableList);
                    }

                    return(null);
                };

                para.Completed = (ret) =>
                {
                    if (ret.Status == PartAsynExcuteStatus.Exception)
                    {
                        Loger.Error(ret.Exception);
                    }
                };

                PartAsynWaitHelper.Wait(para, this);
            }
            catch (Exception ex)
            {
                Loger.Error(ex);
                MessageBox.Show(ex.Message);
            }
        }
Example #13
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();
        }
Example #14
0
 /// <summary>
 /// 异步等待
 /// </summary>
 /// <typeparam name="T">异步执行参数类型</typeparam>
 /// <typeparam name="TResult">异步执行返回值类型</typeparam>
 ///<param name="asynWaitPara">异步等待执行参数</param>
 ///<param name="containerControl">容器控件</param>
 public static void Wait <T, TResult>(PartAsynWaitPara <T, TResult> asynWaitPara, System.Windows.Controls.Panel containerControl)
 {
     Wait <T, TResult>(asynWaitPara, containerControl, null);
 }
Example #15
0
        private void TestAsynWait(UIElement container)
        {
            var para = new PartAsynWaitPara <int, string>();

            para.Para     = 100;
            para.Title    = "测试这个控件";
            para.Function = (inp) =>
            {
                try
                {
                    for (int i = 0; i < inp.Para; i++)
                    {
                        inp.AsynWait.Message = string.Format("正在处理:{0}项..", i);
                        Thread.Sleep(2000);

                        inp.Token.ThrowIfCancellationRequested();
                        //if (inp.Token.IsCancellationRequested)
                        //{
                        //    break;
                        //}

                        //if (i > 5)
                        //{
                        //    throw new NotSupportedException("XXX");
                        //}
                    }

                    return("OK");
                }
                catch (OperationCanceledException)
                {
                    return("OperationCanceledException");
                }
            };
            para.ShowCancel           = true;
            para.ImmediatelyCompleted = false;
            //para.AsynWaitBackground = Brushes.Red;
            para.Completed = (p) =>
            {
                string str;
                switch (p.Status)
                {
                case PartAsynExcuteStatus.Completed:
                    str = p.Result;
                    break;

                case PartAsynExcuteStatus.Exception:
                    str = p.Exception.Message;
                    break;

                case PartAsynExcuteStatus.Cancel:
                    str = p.Result + "_Cancel";
                    break;

                default:
                    str = "none";
                    break;
                }

                MessageBox.Show(this, str);
            };

            //WPFPartAsynWaitHelper.Wait(para, this.grid);
            WPFPartAsynWaitHelper.Wait(para, container, true);
        }
Example #16
0
 /// <summary>
 /// 异步等待
 /// </summary>
 /// <typeparam name="T">异步执行参数类型</typeparam>
 /// <typeparam name="TResult">异步执行返回值类型</typeparam>
 ///<param name="asynWaitPara">异步等待执行参数</param>
 ///<param name="containerControl">容器控件</param>
 ///<param name="hasWinformControl">容器控件中是否含有Winform的子控件[true:有;false:没有]</param>
 public static void Wait <T, TResult>(PartAsynWaitPara <T, TResult> asynWaitPara, UIElement containerControl, bool hasWinformControl = false)
 {
     Wait <T, TResult>(asynWaitPara, containerControl, null, hasWinformControl);
 }
 /// <summary>
 /// 异步等待
 /// </summary>
 /// <typeparam name="T">异步执行参数类型</typeparam>
 /// <typeparam name="TContainer">容器控件类型</typeparam>
 /// <typeparam name="TResult">异步执行返回值类型</typeparam>
 ///<param name="asynWaitPara">异步等待执行参数</param>
 ///<param name="containerControl">容器控件</param>
 ///<param name="asynExcute">异步等待UI</param>
 public static void Wait <T, TContainer, TResult>(PartAsynWaitPara <T, TResult> asynWaitPara, TContainer containerControl, IAsynExcute <T, TContainer, TResult> asynExcute)
 {
     Wait <T, TContainer, TResult>(asynWaitPara, containerControl, null, asynExcute);
 }