怎么在Global.asax文件中定义一个全局唯一的 Timer对象? 怎么在Global.asax文件中定义一个全局唯一的 Timer对象?我想在其它地方改变这个对象,使其可以定时启动,也可以关闭. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用全局变量 ApplicationTimer 周期工作开始的时候检测Application是否要求它停止。 if(Application["Timer"]==null)//如果不存在就设置{Timer timer;//这里实例化。Application["Timer"]=timer;}else{Timer timer=(Timer)Application["Timer"];//这里取}参考一下。 你无需把全局的东西看作“在Global.asax”这么狭隘,这样看会影响你开发许多东西。在一些“范例”中作者写东西在Global.asax只是为了简单说明一个例子而已,而并不是教你设计程序。设计程序时,如果是稍微复杂一点的东西,往往要独立出来。你可以添加一个“类”文件,专门负责处理你心目中的这个“Timer对象”所要做的事情。其实重点不是它何时开启、关闭,而是它到底要定时做什么动作。这个类例如:using System;using System.Threading;static public class TestTimer{ static Timer GlobalTimer = new Timer(new TimerCallback(GlobalTimer_ToDo), null, Timeout.Infinite, Timeout.Infinite); static void GlobalTimer_ToDo(object obj) { //todo : 这里做该做的事 } static public void Start(long a, long b) { GlobalTimer.Change(a, b); } static public void Stop() { GlobalTimer.Change(Timeout.Infinite, Timeout.Infinite); }}这样,你就可以在Global.asax中启动它,例如:<%@ Application Language="C#" %><script RunAt="server"> void Application_Start(object sender, EventArgs e) { TestTimer.Start(0, 2000); }你可以在任何类中访问这个TestTimer类,直接调用它的Start、Stop方法。 但是你要明白,asp.net以及宿主系统iis经常会定期维护,经常会让应用程序重启。这是你在自己的开发机器上难以遇到也往往忽略去测试的,但是放在生产服务器上这是常态。当应用程序重启时,就又变为上面示例中那样每隔2秒执行一次GlobalTimer_ToDo。除非你把“在其它地方改变这个对象”的参数持久记录在磁盘上(数据库系统也是一种磁盘介质),在Application_Start中首先检索磁盘来设置定时器的启动参数。 .net求助读写XML 求高手帮忙用ASP.NET做一个项目,急、、、 请问用asp.net(vb代码) 如何截取一定长度在DataList控件已经绑定的数据 高分求一单.NET子设计,想知道原理,最好是跟连接数据库有关的,谢谢! session过期问题 将Word文档转换成pdf时候出错 针对高并发、海量数据,asp.net求推荐相关书籍,感激不尽!!!! 请教C#.Net和Dreamweaver中模板问题! 我想学.net,但.net包括的太多了,不知该选择学习哪种语言。 关于Crystal Report 第一次编译超级慢 请教ASP.NET中,连接ACCESS数据库的相对路径问题
{
Timer timer;//这里实例化。
Application["Timer"]=timer;
}
else
{
Timer timer=(Timer)Application["Timer"];//这里取
}
参考一下。
using System.Threading;static public class TestTimer
{ static Timer GlobalTimer = new Timer(new TimerCallback(GlobalTimer_ToDo), null, Timeout.Infinite, Timeout.Infinite); static void GlobalTimer_ToDo(object obj)
{
//todo : 这里做该做的事
} static public void Start(long a, long b)
{
GlobalTimer.Change(a, b);
} static public void Stop()
{
GlobalTimer.Change(Timeout.Infinite, Timeout.Infinite);
}}
这样,你就可以在Global.asax中启动它,例如:<%@ Application Language="C#" %><script RunAt="server">
void Application_Start(object sender, EventArgs e)
{
TestTimer.Start(0, 2000);
}
你可以在任何类中访问这个TestTimer类,直接调用它的Start、Stop方法。