# Friday, September 29, 2006

      一个asp.net应用中,可能我们有时候会需要处理一个可能长时间执行的任务。比如说将新闻内容生成静态页面,如果在asp.net中调用方法来处理,很可能引起超时操作,而且我们也无法获知当前处理的进度情况。那么我们应该如何解决该问题呢?答案是使用Thread+AJAX。

      基本的解决办法是,首先我们将可能长时间执行的程序放在一个Thread中执行:
Thread tr= new Thread(new ThreadStart(ArticleCreate));
tr.Start();

      然后在执行过程中将执行的进度数据存在Session中:
private void ArticleCreate()
{
    string sqlStr="select * from article order by id asc"
    DataSet ds=……
    int tCount =ds.Tables[0].Rows.Count;
    for(int i=0;i<tCount;i++)
    {
        ……
        Session["c_pro"] = (i+1)*100/tCount;
    }
    Session["c_pro"]=100;
}

      再后,我们使用AjaxPro.Net从客户端读取服务器端的Session值:
[AjaxMethod(AjaxPro.HttpSessionStateRequirement.Read)]
public int tmethod()
{
    return (int)Session["c_pro"];
}

注意红色字体部分,这是必要的参数,否则无法在AjaxMethod中使用Session,进而在客户端也将无法调用。

客户端进度条的实现可以参考我的改进版的渐变效果进度条fingerscrossed

posted on Friday, September 29, 2006 11:02:37 AM (China Standard Time, UTC+08:00)  #    Comments [1]
# Sunday, September 10, 2006

声明:本作品属于Demo级别,功能并未完整实现,供.Net俱乐部会员学习使用,高手就不必看了

授权:开源&&非商业化使用

作者:qihangnet,phenge

技术:SqlServer2000+C#+Asp.Net1.1
         存储过程
         自定义实体
         自定义实体集合
         I/O
         反射
         接口
         IDataRecord
         数据缓存
         Form认证
         三层结构
         工厂模式
         ……
文档:(电信)Qihang_CMS.chm (网通)QihangCMS.chm

代码:(电信)Qihang_CMS.rar (网通)Qihang_CMS.rar

数据库备份文件:(电信)qihang_cmsDB.rar (网通)qihang_cmsDB.rar

参与讨论:http://qihang.net/forums/thread/2908.aspx

posted on Sunday, September 10, 2006 12:35:56 PM (China Standard Time, UTC+08:00)  #    Comments [3]