做一个任务类,在客户端时时(暂且刷新时间为1秒)得知任务执行了多少时间,并且在成功完成任务后给出执行时间,在任务出错的时候给出出错的时间。

前台

<form id="Form1" method="post" runat="server">

<asp:label id="lab_state" runat="server"></asp:label><br>

<asp:Button id="btn_startwork" runat="server" Text="运行一个长时间的任务"></asp:Button>

</form>

后台

先是一些类的申明:

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("","<script>window.setTimeout('location.href=location.href',1000);</script>");

//不断的刷新本页面,随时更新任务的状态

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("","<script>location.href=location.href;</script>");

//立即刷新页面

}

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

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中使用线程相关推荐

  1. 搜集《ASP.NET中常用的26个优化性能方法》

    1. 数据库访问性能优化 a.数据库的连接和关闭 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源.ASP.NET中提供了连接 ...

  2. [转帖]ASP.NET中常用的优化性能的方法

    ASP.NET中常用的优化性能的方法(转贴,Icyer收集整理) 1.       数据库访问性能优化     数据库的连接和关闭 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要 ...

  3. 在 ASP.NET 中使用 HTTPHandler 实现 Front Controller

    http://msdn.microsoft.com/zh-cn/library/ms998532.aspx 背景信息 示例有助于解释如何在 ASP.NET 中实现 Front Controller,并 ...

  4. ASP.NET中常用的26个优化性能方法(转)

    1. 数据库访问性能优化 数据库的连接和关闭 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源.ASP.NET中提供了连接池( ...

  5. 【分析总结】ASP.NET中的状态管理原理

    HTTP协议是介于请求.响应的断开时网络协议,与连接式的网络协议不同,例如,与我们熟悉的TCP协议相比,客户端与服务器并没有持续的连接存在,在每一次会话之后,连接都会被断开,在下一次请求的时候客户端会 ...

  6. ASP.NET中application对象的用法(面试题)

    ASP.NET中application对象的用法 本文导读:Application对象是HttpApplicationState类的一个实例,Application状态是整个应用程序全局的.Appli ...

  7. 【转】C#中的线程 入门

    Keywords:C# 线程 Source:http://www.albahari.com/threading/ Author: Joe Albahari Translator: Swanky Wu ...

  8. ASP.NET中常用的26个优化性能方法

    1. 数据库访问性能优化 数据库的连接和关闭 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源.ASP.NET中提供了连接池( ...

  9. ASP.NET中进行消息处理(MSMQ) 三

    在本文的前两篇文章里对MSMQ的相关知识点进行了介绍,很多阅读过这前两篇文章的朋友都曾问到过这样一些问题:   1.如何把MSMQ应用到实际的项目中去呢?   2.可不可以介绍一个实际的应用实例?   ...

最新文章

  1. python拆堆和堆叠的操作_堆叠框架的Python / Tkinter退出按钮
  2. 应用Mongoose开发MongoDB(2)模型(models)
  3. (JAVA学习笔记) 类与对象小结
  4. QImage 与 cv::Mat 之间的相互转换
  5. “悟道”公开课第四讲丨悟道开发案例:​悟空策论——议论文写作平台
  6. 端口聚合Port-Channel
  7. 【容器云】十分钟快速构建 Influxdb+cadvisor+grafana 监控
  8. java httpurlconnection 设置编码_java – 通过HttpURLConnection发送UTF-8字符失败
  9. Qt QString 与 const char* 类型的转换
  10. 梧桐计划发布!百度智能云携手合作伙伴共创“云智一体”繁荣新生态
  11. 全国哀悼日,网站变黑白完美兼容IE,亲测有效
  12. NYOJ 吃土豆(动态规划)
  13. HFSS同轴馈电矩形贴片天线馈电点以及尺寸的计算
  14. rhel centos 源_Rhel centos 7的fips脚本
  15. CentOS 7 使用 Nginx 搭建视频点播服务器
  16. Hadoop大数据基础知识点总结--持续更新
  17. mysql nb3 备份_通过Navicat进行Mysql数据库自动备份与还原
  18. Go实战--golang中获取公网ip、查看内网ip、检测ip类型、校验ip区间、ip地址string和int转换、根据ip判断地区国家运营商等
  19. 模块递归拆分法: 设计模式 设计原则,复杂层次设计举例。系统重构 装饰模式,门面模式,代理模式
  20. PHP 实现中文分词搜索功能

热门文章

  1. Arcengine实现创建网络数据集札记(二)
  2. maze_travel的隐私声明
  3. 搭建Spring开发环境并编写第一个Spring小程序
  4. pringboot后端解决跨域问题
  5. Mybatis一级缓存、整合第三方缓存ehcache、Mybatis二级缓存
  6. java分页插件PageHelper的内置list数据操作失败
  7. linux 减小根分区大小_减小linux下根分区
  8. 一个优雅的报警处理系统范例
  9. 白帽子发现美军网站SQL注入漏洞,可获取敏感数据
  10. 以数据为中心的存储观