コード例 #1
0
ファイル: TAP.cs プロジェクト: zhanxh/WpfDevDemo
        public IWorkResult <TResult> Handle(Func <TWorkArgs> args, Action <IWorkResult <TResult> > uiAction, IWorkResult[] preWorkUnitList, WaitMode mode)
        {
            this.waitMode              = mode;
            this.uiAction              = uiAction;
            this.preWorkUnitList       = preWorkUnitList;
            this.workResult.IsError    = false;
            this.workResult.IsComplete = false;

            Task <IWorkResult <TResult> > task = new Task <IWorkResult <TResult> >(
                o =>
            {
                TResult result = default(TResult);
                try
                {
                    if (this.waitMode == WaitMode.Default || this.waitMode == WaitMode.Bll)
                    {
                        if (!WorkResult.Wait(this.preWorkUnitList))
                        {
                            this.isSuccessPreWorkUnitList = false;
                            return(this.workResult);
                        }
                    }

                    result = this.work(args());
                    this.workResult.Result = result;
                }
                catch (DevException hsex)
                {
                    this.workResult.IsError      = true;
                    this.workResult.HsufErrorNo  = hsex.ErrorNo;
                    this.workResult.ErrorMessage = hsex.Message;
                }
                catch (Exception exc)
                {
                    this.workResult.IsError      = true;
                    this.workResult.ErrorMessage = exc.Message;
                }

                return(this.workResult);
            }, args);

            task.Start();
            task.ContinueWith(this.UpdateUI);

            return(workResult);
        }
コード例 #2
0
ファイル: TAP.cs プロジェクト: zhanxh/WpfDevDemo
        private void UpdateUI(Task <IWorkResult <TResult> > task)
        {
            if (this.uiAction == null)
            {
                this.workResult.IsComplete = true;
                return;
            }

            if (this.waitMode == WaitMode.UI)
            {
                if (!WorkResult.Wait(this.preWorkUnitList))
                {
                    this.isSuccessPreWorkUnitList = false;
                }
            }

            this.synchronizationContext.Post(UpdateUISafePost, task.Result);
        }