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