189 8069 5689

如何利用ASP.NET多线程执行长时间的任务

本篇内容介绍了“如何利用ASP.NET多线程执行长时间的任务”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

成都创新互联专注于南陵网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供南陵营销型网站建设,南陵网站制作、南陵网页设计、南陵网站官网定制、成都微信小程序服务,打造南陵网络公司原创品牌,更为您提供南陵网站排名全网营销落地服务。

在ASP.NET中执行一个长时间的操作,有的时候需要在在客户端有一个反馈能了解到任务的执行进度,大致看了一下有这么几种做法:

(1)按下按钮的时候给出一个

提示正在执行任务,执行完毕让这个
隐藏

(2)按下按钮的时候跳转到一个提示任务正在执行的页面,执行完毕了再跳转回来

(3)做一个任务类,开启另外一个线程执行任务,同时在客户端或者服务器端保存这个类的实例来跟踪任务的执行情况(1)和(2)的情况用的比较多,也比较简单,缺点是不能实时的知道任务的执行进度,而且时间一长可能会超时,(3)的方法就会比较好的解决上面说的2个缺点。下面着重说一下(3)的实现方法,先从简单开始,我们做一个任务类,在客户端时时(暂且刷新时间为1秒)得知任务执行了多少时间,并且在成功完成任务后给出执行时间,在任务出错的时候给出出错的时间。

ASP.NET多线程前台

   
      

ASP.NET多线程后台

先是一些类的申明:

protected System.Web.UI.WebControls.Button btn_startwork;   protected System.Web.UI.WebControls.Label lab_state;   //前面2个是vs.net自己生成的   protected work w;   在Page_Load里面输入以下代码:   if(Session["work"]==null)      {       w=new work();       Session["work"]=w;      }      else      {       w=(work)Session["work"];      }      switch(w.State)      {       case 0:       {        this.lab_state.Text="还没有开始任务";        break;       }       case 1:       {        this.lab_state.Text="任务进行了"+((TimeSpan)(DateTime.Now-w.StartTime)).TotalSeconds+"秒";        this.btn_startwork.Enabled=false;        Page.RegisterStartupScript("","");        //不断的刷新本页面,随时更新任务的状态        break;       }       case 2:       {        this.lab_state.Text="任务结束,并且成功执行所有操作,用时"+((TimeSpan)(w.FinishTime-w.StartTime)).TotalSeconds+"秒";        this.btn_startwork.Enabled=true;        break;       }       case 3:       {        this.lab_state.Text="任务结束,在"+((TimeSpan)(w.ErrorTime-w.StartTime)).TotalSeconds+"秒的时候发生错误导致任务失败";        this.btn_startwork.Enabled=true;        break;       }      }

在按钮单击事件内输入以下代码:

if(w.State!=1)      {       this.btn_startwork.Enabled=false;       w.runwork();       Page.RegisterStartupScript("","");       //立即刷新页面      }

另外建立一个任务类,代码如下:

public class work    {     public int State=0;//0-没有开始,1-正在运行,2-成功结束,3-失败结束           public DateTime StartTime;     public DateTime FinishTime;     public DateTime ErrorTime;     public void runwork()     {      lock(this)//确保临界区被一个Thread所占用      {       if(State!=1)       {        State=1;        StartTime=DateTime.Now;        System.Threading.Thread thread=new System.Threading.Thread(new System.Threading.ThreadStart(dowork));        thread.Start();                                }      }     }     private void dowork()     {      try      {       SqlConnection conn=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["conn"]);       SqlCommand cmd=new SqlCommand("Insert Into test (test)values(’test’)",conn);       conn.Open();       for(int i=0;i<5000;i++)cmd.ExecuteNonQuery();       conn.Close();       //以上代码执行一个比较消耗时间的数据库操作       State=2;      }      catch      {       ErrorTime=DateTime.Now;       State=3;      }      finally      {       FinishTime=DateTime.Now;      }     }    }   }

运行这个页面,看到每秒页面刷新一次反馈任务执行到现在的时间,在结束后给出任务总的用时。(如果任务出错也给出出错时间)

(这个ASP.NET多线程示例比较简单,基本能实现长时间的任务执行与客户端的交互,但是界面不是很友善,而且如果有很多项操作的话,只能给出执行了多少时间,不能显示执行到第几项任务,在下一篇文章中,将会改进这个类和界面)

“如何利用ASP.NET多线程执行长时间的任务”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!


本文题目:如何利用ASP.NET多线程执行长时间的任务
文章地址:http://cdxtjz.cn/article/gcgcgc.html

联系我们

您好HELLO!
感谢您来到成都网站建设公司,若您有合作意向,请您为我们留言或使用以下方式联系我们, 我们将尽快给你回复,并为您提供真诚的设计服务,谢谢。
  • 电话:028- 86922220 18980695689
  • 商务合作邮箱:631063699@qq.com
  • 合作QQ: 532337155
  • 成都网站设计地址:成都市青羊区锣锅巷31号五金站写字楼6楼

小谭建站工作室

成都小谭网站建设公司拥有多年以上互联网从业经验的团队,始终保持务实的风格,以"帮助客户成功"为已任,专注于提供对客户有价值的服务。 我们已为众企业及上市公司提供专业的网站建设服务。我们不只是一家网站建设的网络公司;我们对营销、技术、管理都有自己独特见解,小谭建站采取“创意+综合+营销”一体化的方式为您提供更专业的服务!

小谭观点

相对传统的成都网站建设公司而言,小谭是互联网中的网站品牌策划,我们精于企业品牌与互联网相结合的整体战略服务。
我们始终认为,网站必须注入企业基因,真正使网站成为企业vi的一部分,让整个网站品牌策划体系变的深入而持久。