如何反馈对象的某一处理过程的进度信息

在各种类型的应用程序中,为了给用户提供良好的应用体验,如果某一处理过程的时间很长,我们就要对用户展示该处理过程的进度信息。

在.net framework的开发中,为了不打破对象化的结构,我们可以使用下面的方式实现。

在该处理过程所属对象上添加System.ComponentModel.AsyncCompletedEventHandler和System.ComponentModel.ProgressChangedEventHandler事件。

代码如下:

class ObjectA

{

        public void Do()

       {

            try
            {

                for (int i = 0; i < Length; i++)
                {
                    if (_BeCancelled)
                    {
                        new WaitCallback(RaiseDoneEvent).Invoke(new AsyncCompletedEventArgs(null, true, this));

                        return;
                    }
                    else
                    {
                         //计算进度百分数percentAge

                         new WaitCallback(RaiseDoingEvent).Invoke(new ProgressChangedEventArgs(percentAge, this));
                    }
                }

                new WaitCallback(RaiseDoneEvent).Invoke(new AsyncCompletedEventArgs(null, false, this));
            }
            catch (Exception e)
            {
                new WaitCallback(RaiseDoneEvent).Invoke(new AsyncCompletedEventArgs(e, false, this));
            }

       }

        #region 事件
        /// <summary>
        /// 当处理完成时,触发此事件
        /// </summary>
        public event AsyncCompletedEventHandler Done;
        /// <summary>
        /// 在处理过程中,进度发生变化时,触发此事件
        /// </summary>
        public event ProgressChangedEventHandler Doing;

        private void RaiseDoneEvent(object arg)
        {
            if (Done!= null)
                Done(this, (AsyncCompletedEventArgs)arg);
        }
        private void RaiseDoingEvent(object arg)
        {
            if (Doing!= null)
                Doing(this, (ProgressChangedEventArgs)arg);
        }
        #endregion

}

 

这样,外部代码就可以通过上面两个事件的参数信息获得指定处理过程的进度信息了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值