No 55 · 在asp.net 中使用线程
来源:互联网 发布:数组是物理结构么 编辑:程序博客网 时间:2024/05/29 15:19
做一个任务类,在客户端时时(暂且刷新时间为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;
}
}
}
}
运行这个页面,看到每秒页面刷新一次反馈任务执行到现在的时间,在结束后给出任务总的用时。(如果任务出错也给出出错时间)
- No 55 · 在asp.net 中使用线程
- asp.net中使用线程
- 在ASP.NET中使用.NET组件
- 在ASP.NET中使用.NET组件
- 在ASP.NET中使用.NET组件
- 在ASP.NET中使用.NET组件
- 在ASP.NET中使用.NET组件
- 在ASP.NET中使用.NET组件
- 在Asp.net MVC中使用Asp.net Ajax
- [Asp.net mvc] 在Asp.net mvc 中使用MiniProfiler
- No 114 · Asp.net中Global.asax文件的使用(监听)
- 在asp.net中使用excel模板
- 在asp.net中使用XMLHTTP
- alert在asp.net中如何使用??
- alert在asp.net中如何使用??
- 在ASP.NET中使用SMTP服务
- 在asp.net中使用客户端脚本
- 在ASP.NET中使用JavaScript脚本
- -【内核对象线程同步】信标内核对象
- No 54 · Request
- 等待定时器与用户定时器的区别
- -【内核对象线程同步】等待定时器内核对象
- -【内核对象线程同步】事件内核对象
- No 55 · 在asp.net 中使用线程
- -【内核对象线程同步】成功等待的副作用
- 如何编写软件需求规格书(2)
- css自动高度
- -【内核对象线程同步】等待函数
- c++初始化表
- -【内核对象线程同步】概述
- 单片机关于RAM的作用
- -【用户方式线程同步】关键代码段