控件使用 - 进度条
金蝶云社区-JohnnyDing
JohnnyDing
4人赞赏了该文章 5,480次浏览 未经作者许可,禁止转载编辑于2016年12月23日 17:35:35

需求场景介绍

场景1:
需要在服务器上进行一项复杂的业务处理,耗时比较久,希望能够实时的显示出处理进度,避免用户毫无所知的等待;

场景2:
由用户启动,定时在服务器自动执行某些逻辑,把结果反馈给用户。

进度条控件启动后,会定时到服务端,获取最新进度,非常适合上面两种场景。

案例说明


界面上,包括一个进度条,一个启动按钮,一个停止按钮
点击启动按钮后,开始进度;点击停止按钮,结束进度
每隔2秒,进度条会到服务端获取最新进度,并显示一个提示信息

图一:设计界面

图二:运行效果

演示代码
//********************************************************************************
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using Kingdee.BOS;
using Kingdee.BOS.Util;
using Kingdee.BOS.Core;
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel;
namespace JDSample.FormPlugIn.DynamicForm
{
///


/// 演示使用进度条控件,定时到服务端获取进度
///

///
/// 本案例,界面上需要放一个进度条、一个启动按钮、一个停止按钮
///
[Description("演示使用进度条控件,定时到服务端获取进度")]
public class S161223ProgressBarEdit : AbstractDynamicFormPlugIn
{
///
/// 进度条
///

private ProgressBar _progressBar = null;
///
/// 当前进度
///

private int _progressValue = 0;
///
/// 界面初始化
///

///
public override void OnInitialize(InitializeEventArgs e)
{
this._progressBar = this.View.GetControl("F_JD_ProgressBar");
}
///
/// 按钮点击事件:启动进度条
///

///
public override void ButtonClick(ButtonClickEventArgs e)
{
if (e.Key.EqualsIgnoreCase("F_JD_Start"))
{
if (this._progressBar != null)
{
// 初始化当前进度:
this._progressValue = 0;
// 启动进度条,每个2s,到服务器获取一次进度。
// 如果进度达到了100,则自动停止
this._progressBar.Start(2);
// 开启一个新线程,处理需要长时间进行的业务
Kingdee.BOS.KDThread.MainWorker.QuequeTask(
() =>
{
// TODO: 异步处理
},
(asynResult) =>
{
if (asynResult != null && asynResult.Exception != null)
{
this.View.ShowMessage(asynResult.Exception.Message);
}
//TODO : 异步处理完毕,进行收尾
});
}
}
else if (e.Key.EqualsIgnoreCase("F_JD_Stop"))
{
// 通过设置当前进度为100,通知进度条,任务已经完成
this._progressValue = 100;
}
}
///
/// 进度条,咨询进度
///

///
public override void OnQueryProgressValue(QueryProgressValueEventArgs e)
{
if (this._progressValue < 100)
{
// 更新进度:进度+1,演示进度的变化
// 只有演示代码才需要在此更新进度,
// 实际业务,会在处理业务的异步进程中,刷新进度变量的值
this._progressValue++;
if (this._progressValue == 100)
{
// 进度到了100,重头再来
this._progressValue = 1;
}
}
// 返回进度给前端
e.Value = this._progressValue;
this.View.ShowMessage(string.Format("第{0}次咨询进度", this._progressValue));
}
}
}