破宝

我是一块破破烂烂的宝贝石头。
随笔 - 94, 评论 - 1281, 引用 - 52

导航

关于

自选精华版 RECOMMENDATIONS
留言板 GUESTBOOK

本人 blog 文章、图片及其他资源等,除另有声明外,均遵循以下原则向全球(当然包括朝鲜、古巴、利比亚等国)共享:

1。欢迎转载、复制、传播、引用,但转载、复制(包括但不仅限于作为参考资料复制到本地)、传播、引用同时必须在显著位置注明作者(破宝/percyboy)和文章原始 URL 地址等信息。但商业转载、复制、传播(尤指用于图书、光盘等媒体的部分或全部),须事先征得本人的许可。

2。文章以“现状”提供,不为由于使用本站资源而造成的任何损失而负责,仅提供力所能及的咨询和参考意见。

3。关于修改:允许您将本 blog 中的资源作为参考资料复制时的一定修改,但仍须保留作者和出处信息;其他情况下的修改(包括修改后再发布),须和本人确认许可。
 

标签

每月存档

最新留言

广告

 

.NET Framework 提供了三种计时器,分别是:

  • System.Timers.Timer
    基于服务器的计时器,位于“工具箱”的“组件”选项卡上;
     
  • System.Windows.Forms.Timer
    基于 Windows 的标准计时器,位于“工具箱”的“Windows 窗体”选项卡上;
     
  • System.Threading.Timer
    仅可在编程时使用的线程计时器。

三种计时器各有特色,详见你的 Visual Studio .NET 文档(位置在: Visual Studio .NET  - Visual Basic 和 Visual C# .NET - 使用组件编程 - 创建文件系统和 Timer 组件 - 基于服务器的计时器简介)。

我曾经写过一篇: 在 ASP.NET 中使用计时器(Timer)
主要列出了在 ASP.NET 应用程序(注意不是 Web Form )中使用 System.Timers.Timer 的一个示例。

有网友把这个例子写进了 Web Form,试验失败后来我的 blog “发泄”怨气,我是可以理解的,但如某些人那样态度过于“蛮横”也让人难以接受。

Web 页面本来就和 Windows 程序不同的思路,Web 页面大多时候更像 C/S 结构的“请求”-“应答”模型(实际上也是这样)。这样“请求”和“应答”就要讲究效率:不能说你“请求”完了,服务器先“休息”1 分钟,然后在“应答”你;如是是这样,还有网友去你的站点吗?

虽然微软花了不少功夫让 Web Form “看起来”很像 Windows Form,但改变不了 Web 页面的实质,所以在 Web Form 中放置计时器的想法是幼稚的。

其实我能理解,几位网友的实际需求是:让网页定时刷新,或者定时做什么事情。可请你注意,这里的“定时”是发生在哪里的?是服务器端吗?不是吧,是在用户客户端,是在访问你页面的用户浏览器端的“定时”!

ASP.NET 程序中 C#/VB.NET 代码书写的代码都是在服务器端执行的。那么 .NET Framework 提供的三种计时器都不能满足你这样的需求!客户端的“定时”如何要用服务端的“Timer”呢?

客户端的“定时”就要用客户端手段去解决,HTML DOM 模型中的 window 对象有 setTimeout 方法,可以帮助你实现你所想要的客户端效果。

BTW,再比如说,你想让访问者看到一个警告框,这个动作同样发生在客户端,所以依然是用客户端手段(比如: HTML DOM 中 window 对象的 alert 方法),而不是用 .NET C#/VB.NET 代码中的 MsgBox.Show() (如果这样将会在服务器上显示一个警告框,你难道要警告“管理员”吗?)。

回过头来说那篇文章,虽然在 Web Form 中不能使用定时器,但在 ASP.NET 应用程序中却是可以的。

ASP.NET 站点中的所有页面组成一个 Web 应用程序,这个程序是在服务器端运行的,存储大家熟悉的 Application、Session 等信息。当 Web 应用程序从服务器启动时,会触发 Application_OnStart;应用程序结束(服务器关机、重启)时,会触发 Application_OnEnd;接到新的客户端“请求”,Application_BeginRequest;……这是一个持续的过程。(一般地,这些代码都可以写在 global.asax 的代码文件中)我们可以在这个过程中使用“计时器”。当然使用的应该是基于服务器的计时器,System.Timers.Timer 类型。

像 ymm 和 daniel 等网友提出的需求(定时从数据库中取出数据生成静态网页)可以通过文中的方法来实现:

也在你的 Application_OnStart 中启动计时器,在 Elaspsed 事件处理程序中写你的“从数据库取数据生成静态页面”的代码。

打印 | 张贴于 2004-08-21 13:49:00 | Tag:暂无标签

留言反馈

#回复: .NET 中的三个 Timer 以及网页中的“Timer” 编辑
同意楼主,我就是开始用的MessageBox来谈出消息框,后来发现每次都是在服务器端弹出,所以没办法用了alert方法,可就是页面不好看,弹出消息框后,页面会反白,能解决吗?
2006-12-25 10:59:00 | [匿名:北地南天]
#re: .NET 中的三个 Timer 以及网页中的“Timer” 编辑
还是不会,能编写一个WEBFORM程序压缩后发到网上吗?
2006-03-31 20:29:00 | [匿名:SKY]
#re: .NET 中的三个 Timer 以及网页中的“Timer” 编辑
还是不会,能编写一个WEBFORM程序压缩后发到网上吗?
2006-03-31 20:29:00 | [匿名:SKY]
#re: .NET 中的三个 Timer 以及网页中的“Timer” 编辑
最近我的一个程序,程序中使用2个timer,1个画图,另外1个读取硬件数据,会发生堆栈溢出的情况,后来改成在1个timer中读取数据和画图就没事了,怎么回事那?

samantha@bytefocus.com
2006-03-15 08:34:00 | [匿名:Lemon]
#re: .NET 中的三个 Timer 以及网页中的“Timer” 编辑
我写过一个程序,用2个timer就发生堆栈溢出,后来改成1个就没事了,费解。
2006-03-15 08:32:00 | [匿名:AAV]
#asp.net编制的网页完成幻灯片的显示有问题!! 编辑
asp.net编制的网页完成幻灯片的显示有问题!!

也是需要定时变换的!

有解决方法吗

why8203@163.com
2006-03-07 16:43:00 | [匿名:why]
#re: .NET 中的三个 Timer 以及网页中的“Timer” 编辑
ok
2006-01-18 11:04:00 | [匿名:求助安徽合肥天冠物业管理软件 关于Atlas]
#re: .NET 中的三个 Timer 以及网页中的“Timer” 编辑
那我做线考试系统,若在考试时间到时,用户还没有做完,这要用定时器,那这个定时器该怎么写呢?
2005-12-11 17:48:00 | [匿名:秋风瑟瑟]
#re: .NET 中的三个 Timer 以及网页中的“Timer” 编辑
难为破宝了
2005-06-21 21:14:00 | [匿名:呵呵]
#re: .NET 中的三个 Timer 以及网页中的“Timer” 编辑
倒,你这个网站看来有点BUG,
排列是这样的 ***
--------------- * *
--------------- ***
现在总该不会错吧@-@
2005-04-20 03:08:00 | [匿名:天涯明月无酒]
#re: .NET 中的三个 Timer 以及网页中的“Timer” 编辑
晕,排列是这样的***
* *
***
如果有其他的方法实现这个效果也可以的!谢谢!!!
2005-04-20 03:06:00 | [匿名:天涯明月无酒]
#re: .NET 中的三个 Timer 以及网页中的“Timer” 编辑
我正再写个网站,里面有个这样的页面(当然,还没有实现)
有8张图片分别装在8个IMAGE里,排列是这样的***
* *
***
我现在的构思是,先随机找到一个图片把它更换成另外的图片,然后按照顺时针方向逐一进行更换,当后一副图片更换,前一副图片就恢复原来的样子,每两张图片之间的时间间隔是0.2秒,用BUTTON启动,让这个过程在3-5秒的随机时间里终止,并显示最后一张图片,
现在请教各位大虾,这个过程用什么方法实现,效率比较高,
高手请回复!!!谢谢!!!
2005-04-20 03:04:00 | [匿名:天涯明月无酒]
#re: .NET 中的三个 Timer 以及网页中的“Timer” 编辑
看了破宝的诸多回复,有出力不讨好的感觉,本想将自己的心得与人分享反招来一堆闹心的东西,换作你又作何感想。人啊,需要经常换位一下....

----------------------------------------------
同意!!!
本来主人是为了给客人提供个和谐、充满交流气息的氛围,没想到,这么多的不速之客好像是来"砸场子",

破宝兄,走自己的路,嫉妒别人的家伙总想自作聪明挖苦别人
2005-04-08 19:26:00 | [匿名:Jinglecat]
#.NET 中的三个 Timer 以及网页中的“Timer” 编辑
Ping Back来自:blog.csdn.net
2005-01-24 11:38:00 | [匿名:xuhu]
#re: .NET 中的三个 Timer 以及网页中的“Timer” 编辑
看了破宝的诸多回复,有出力不讨好的感觉,本想将自己的心得与人分享反招来一堆闹心的东西,换作你又作何感想。人啊,需要经常换位一下....
2005-01-13 09:25:00 | [匿名:平和心态者]
#re: .NET 中的三个 Timer 以及网页中的“Timer” 编辑
to Lzp:

你说的这个的确封装得很好, 用起来可能会像其他控件一样方便。但归根结底,它也是由 javascript + DHTML 实现的,不信的话,你可以看看它生成的 HTML 源代码……当然这个已经可以称作 ASP.NET 服务器控件了,因为几乎所有的服务器控件都是通过封装 javascript + DHTML 实现特定效果而实现的。

如果没有理解错误的话,寒枫天伤 的意思应该是说在 ASP.NET 服务器端代码中直接使用 System.WindowsForms.MessageBox 这个 Windows Form 控件,显示消息框。但我认为这是不可能的,除非他能举出实例或者给出相关资料链接。
2004-12-28 09:31:00 | [匿名:破宝]
#关于.Net中的计数器 编辑
Ping Back来自:blog.csdn.net
2004-12-20 17:46:00 | [匿名:leisang]
#re: .NET 中的三个 Timer 以及网页中的“Timer” 编辑
能帮助我在asp.net中实现自动提交功能!!用asp.net,不要js
2004-12-15 11:41:00 | [匿名:jbbjcc]
#re: .NET 中的三个 Timer 以及网页中的“Timer” 编辑
to 寒枫天伤:
不妨贴个例子?或者给个连接?
否则我是不会相信的。
2004-12-13 13:17:00 | [匿名:破宝]
#re: .NET 中的三个 Timer 以及网页中的“Timer” 编辑
TO 破宝:
我说的确实是服务端使用:
MessageBox.Show();

如果在asp.net中用,可以在客户端弹出MessageBox,只是,弹出来的窗口不太好看。弹出来的窗口也确实是Windows窗口。

这样例子,网上有的,你自己找找吧。

MessageBox的Show方法有一个签名可以达到此效果。

我说的绝对不是js中的alert
2004-12-13 12:56:00 | [匿名:寒枫天伤]
#re: .NET 中的三个 Timer 以及网页中的“Timer” 编辑
谁能帮助我在asp.net中实现自动提交功能!!用asp.net,不要js
2004-11-22 17:13:00 | [匿名:sun]
#re: .NET 中的三个 Timer 以及网页中的“Timer” 编辑
我要写一个聊天页面放在服务器,客户端访问这个页面时大体上实现两个功能:
显示聊天内容和发送聊天话语,其中聊天内容是从服务器的数据库读取来的。
现在的问题是,在客户端打开的页面能定时从服务器读取最新数据,但却不要刷新整个页面
(因为发送那部分不需要,比如在开头添加:<meta http-equiv="refresh" content="10">),
怎么实现呢?用timer能不能实现?这个问题困扰我好久,哪位兄弟能给点意见?
2004-11-15 17:02:00 | [匿名:slelotus]
#re: .NET 中的三个 Timer 以及网页中的“Timer” 编辑
to Blackhorse:

我文章里强调了:不能在 Web Forms (也就是你说的 aspx 网页)里用 Timer。
2004-11-08 09:15:00 | [匿名:破宝]
#re: .NET 中的三个 Timer 以及网页中的“Timer” 编辑
在普通的aspx网页中加入定时器后,无法在Elaspsed 事件进行网页的重定向
2004-11-07 21:56:00 | [匿名:Blackhorse]
#re: .NET 中的三个 Timer 以及网页中的“Timer” 编辑
to fucrosoft:

本身代码就写在 global.asax 中,哪来的“当前页面”?

你的真实想法是:“将某个 *.aspx 页面输出的内容保存到静态的 *.html 中”?是这样吗?

如果是这样,当然也是可以实现的,但不是像你想象中的那么简单、直接。
(大致思路是:使用 System.Net 中的类,模拟一个 HttpRequest 到那个 aspx,将得到的 HttpResponse 写入到文件中。 但其实还不如另外的思路:从数据库中直接读数据,然后使用 StringBuilder “拼凑”出和那个 *.aspx 页面效果一致的字符串,直接写入 *.html 文件。这样会比前者运行效率高一些,虽然可能会稍微麻烦些。)

不要整天想着天上会掉馅饼,很多时候偷懒是解决不了问题的。
2004-08-30 09:26:00 | [匿名:破宝]
#re: .NET 中的三个 Timer 以及网页中的“Timer” 编辑
创建新的线程的话,无法读取当前页面的内容吧?所以用这种方法行不通
2004-08-27 13:08:00 | [匿名:fucrosoft]
#re: .NET 中的三个 Timer 以及网页中的“Timer” 编辑
to xuxiaoping:
可能是操作文件的权限不够,请检查目录的 NTFS 权限。你可以先把那段读写文件的代码放在 Web Form 里测试;如果读写成功,再放到 global 里作为计时事件。

to 寒枫天伤:
你说的是客户端 HTML DOM(或者通常所说的 Javascript)里的 alert() 吧?
如果你是说服务器代码中 MessageBox,不妨贴个例子?……
2004-08-27 12:59:00 | [匿名:破宝]
#re: .NET 中的三个 Timer 以及网页中的“Timer” 编辑
我发现一个奇怪的现象,就是我把楼主的代码;用c#来实现时是可以的,但是我改成文件读写后它就死活不执行了,真是郁闷。
2004-08-27 12:50:00 | [匿名:xuxiaoping]
#re: .NET 中的三个 Timer 以及网页中的“Timer” 编辑
MessageBox 可以用在asp.net中。
并在客户端弹出一个窗口作提示。
2004-08-26 19:43:00 | [匿名:寒枫天伤]
#re: .NET 中的三个 Timer 以及网页中的“Timer” 编辑
这么简单的东西都有人误解,,,,我算是服了。。。

最近写东西都不用JS了,呵呵,我的智能手机不支持。
2004-08-23 09:51:00 | [匿名:TommyWOo]
#re: .NET 中的三个 Timer 以及网页中的“Timer” 编辑
客户端可以用js:

setTimeout("fnTime()",1000);
2004-08-22 10:58:00 | [匿名:宝玉]
#re: .NET 中的三个 Timer 以及网页中的“Timer” 编辑
其实说到底就是对WEB模型的一些误解,想当然的把windows程序的一些想法带到了WEB中,于是造成了误会。。。
2004-08-21 16:13:00 | [匿名:cnlamar]
#re: .NET 中的三个 Timer 以及网页中的“Timer” 编辑
好象姚冬的文章中有这篇文章。
2004-08-21 14:21:00 | [匿名:开心就好]
对不起,目前本随笔不允许发表新评论.

Powered by: Joycode.MVC引擎 0.5.2.0