Asp.Net 无刷新文件上传并显示进度条的实现方法及(3)


    public class RequestProgressAsyncHandler : IHttpAsyncHandler
    {
        public void ProcessRequest(HttpContext context)
        {
        }
        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
        #region IHttpAsyncHandler 成员
        public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, object extraData)
        {
            throw new NotImplementedException();
        }
        public void EndProcessRequest(IAsyncResult result)
        {
            throw new NotImplementedException();
        }
        #endregion
    }


BeginProcessRequest和EndProcessRequest是两个核心的方法,其他的两个不用处理。当该处理程序处理请求 时,BeginProcessRequest是第一个被调用的函数,返回一个包含异步状态信息的对象,该对象是IAsyncResult类型,是实现异步 的关键,用于控制什么时候调用EndProcessRequest来结束处理程序的等待状态,BeginProcessRequest被调用之后,程序就 处于等待状态。EndProcessRequest是在结束请求时的处理函数,通过该函数可以向客户端写入信息。

实现接口IAsyncResult

复制代码 代码如下:


    public class AsyncResult : IAsyncResult
    {
        // 标示异步处理的状态
        private bool isComplete = false;

//保存异步处理程序中的Http上下文
        private HttpContext context;

//异步回调的委托
        private AsyncCallback callback;
        /// <summary>
        /// 获取或设置保存下载文件的百分比数值部分
        /// </summary>
        public long PercentNumber;

public AsyncResult(HttpContext context, AsyncCallback callback)
        {
            this.context = context;
            this.callback = callback;
        }
        /// <summary>
        /// 向客户端写入信息
        /// </summary>
        public void Send()
        {
            this.context.Response.Write(PercentNumber);
        }
        /// <summary>
        /// 完成异步处理,结束请求
        /// </summary>
        public void DoCompleteTask()
        {
            if (callback != null)
                callback(this);//会触发处理程序中的EndProcessRequest函数,结束请求
            this.isComplete = true;
        }
        #region IAsyncResult 成员

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjgjgz.html