Timer的疑问

shadow841112 2009-05-11 03:39:18
在Asp.Net上,大致有三种Timer
System.Timers.Timer ,System.Threading.Timer , Ajax Timer
现在我遇到了棘手的问题向各位朋友求救。
通常一直使用都没有什么问题,但是这回的需求比较特殊,在一个页面中使用Timer来定时执行一段代码,然后给XML传值,而网页中有个FLASH做的管理工具一样的插件来对这些XML数据实时监控。
问题来了
如果是前两种Timer,那么在页面导航或者关闭时,Timer不能及时停止。到了别的页面,甚至导航到跨域的页面如GOOGLE什么的,Timer还在执行。
第三种因为是控件,所以不存在这个问题,但是这个Timer控件会引发PostBack,这样由于FLASH不是服务端控件,它当然没有ViewState,所以FLASH会重新加载,这样问题就来了,FLASH是监控窗口,里面用户可以手动选择开几个监控项(监控窗口),当FLASH从新加载后,又回到初始状态了,打开的FLASH监控窗口又没了,又要手动打开。
请教大家怎么解决这个问题。
曾经使用客户端的onbeforeunload事件_doPostBack()来控制让System.Timers.Timer或者System.Threading.Timer停到,但是进到后台中,System.Timers.Timer ,System.Threading.Timer 早已经对象不存在,无法关闭Timer了。
...全文
270 42 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
42 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dickson 2009-05-24
  • 打赏
  • 举报
回复
路过看见你列,萨也看不懂。。。帮你顶嘎子

顶,UP
shadow841112 2009-05-13
  • 打赏
  • 举报
回复
多谢大家的一直关注,虽然没有找到完美的解决方案,但是目前使用IFRAME隐藏实现,我将继续探究更好的解决方案,到时候再与大家分享。
haifeng39 2009-05-12
  • 打赏
  • 举报
回复
帮顶
shadow841112 2009-05-12
  • 打赏
  • 举报
回复
[Quote=引用 39 楼 hchxxzx 的回复:]
你这个"FLASH"要监控什么?如果只是保持该管理工具的选项不消失,那么,你直接使用简单的xmlhttppost方法就可以了.
如果这个管理工具还需要从页面中获取某值,那么,上述方法仍然适用.
以下是脚本

//以XML求取数据
//webFileUrl:要读取的页面地址,可带参数
function XmlPost(webFileUrl)
{
try
{
var result = "";
var xmlHttp = new ActiveXObject("MSXML2.XMLHTTP");
xmlHttp.open("PO…
[/Quote]

多谢回复。不是FLASH刷新取值的问题。而是页面要定时执行函数更新FLASH数据源的问题。
hchxxzx 2009-05-12
  • 打赏
  • 举报
回复
你这个"FLASH"要监控什么?如果只是保持该管理工具的选项不消失,那么,你直接使用简单的xmlhttppost方法就可以了.
如果这个管理工具还需要从页面中获取某值,那么,上述方法仍然适用.
以下是脚本

//以XML求取数据
//webFileUrl:要读取的页面地址,可带参数
function XmlPost(webFileUrl)
{
try
{
var result = "";
var xmlHttp = new ActiveXObject("MSXML2.XMLHTTP");
xmlHttp.open("POST", webFileUrl, false);
xmlHttp.send("");
result = xmlHttp.responseText;
return(result);
}
catch(e)
{
return("脚本错误,未取到正确数据!");
}
}


function 刷新脚本()
{
var url = "xxx.aspx?xxx=1";
//上述xxx.aspx页面中,你可以输出需要的数据

var a = XmlPost(url);
//上述对象a,即为页面中输出的值

//直接使用脚本定时调用本脚本
setTimeout("刷新脚本()",1000*10);
}

//页面加载完毕,调用刷新脚本
setTimeout("刷新脚本()",1000);


如上,你可以不刷新页面,又可以取得到需要的值.

不知我理解是否无误?
ai_li7758521 2009-05-12
  • 打赏
  • 举报
回复
学习
shadow841112 2009-05-12
  • 打赏
  • 举报
回复

我是楼主:
现在目前用IFrame隐藏实现着,这边研究着JQuery实现DIV加载Timer的页面,可以正常加载,但是在被加载页面的Timer执行时,页面会抛弃第一个页面的内容,直接导航到第二个被加载的页面。

经过验证,凡是在被加载页面执行服务端方法引起PostBack后,页面均会抛弃第一个页面,只显示第二个页面,请问如何解决?


armstrong1225 2009-05-11
  • 打赏
  • 举报
回复
帮顶
lsd123 2009-05-11
  • 打赏
  • 举报
回复
.
kingliutt 2009-05-11
  • 打赏
  • 举报
回复
路过,学习~
zzxap 2009-05-11
  • 打赏
  • 举报
回复

<script type="text/javascript" src="JS/jquery-1.3.1.js"></script>
$(document).ready(
function()
{
$("#daohang").load("menuhead.aspx", {limit: 25});//在指定的div内打开动态页面
}
);
shadow841112 2009-05-11
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 hbjmdx008 的回复:]
同意27楼
另外

引用 6 楼 shadow841112 的回复:


是,思路上很简单,请问在什么事件可以对应跳转操作?



看你怎么路转了,不同的路转方式有所不同
[/Quote]

任何方式的跳转,在服务端都很难捕获,请看我说的最后一句,我曾经尝试过客户端回调。
曾经使用客户端的onbeforeunload事件_doPostBack()来控制让System.Timers.Timer或者System.Threading.Timer停到,但是进到后台中,System.Timers.Timer ,System.Threading.Timer 早已经对象不存在,无法关闭Timer了。
shadow841112 2009-05-11
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 camelials 的回复:]
b/s里的timer好像就是你说的问题,停不下来.
所以,在实际的应用中,我宁愿在页面中隐藏一个iframe去内嵌一个定时刷新的页面去做对应的操作.
[/Quote]

也在考虑这个方案,这个是我最后的方案,但是因为本身已经有一个Iframe,多Iframe在FF浏览器下有Bug。
shadow841112 2009-05-11
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 lianglei9810 的回复:]
为啥flash会重新加载? 重新加载还算啥 ajax ,用updatepanel ,里面的才会刷新,不行就手写ajax ,或者用 js的setTimeout("clock()",1000); function clock()
[/Quote]

Ajax的 updatepanel 还是会执行PostBack,Flash还是会刷新,因为FLASH不是服务端控件,不会有VIEWSTATE保存属性,所以,你在FLASH里的任何操作是不会被保存的,PostBack之后,FLASH就回到初始状态的,当然我指的是FLASH里的布局而不是数据。
hbjmdx008 2009-05-11
  • 打赏
  • 举报
回复
同意27楼
另外

[Quote=引用 6 楼 shadow841112 的回复:]


是,思路上很简单,请问在什么事件可以对应跳转操作?
[/Quote]


看你怎么路转了,不同的路转方式有所不同
BossFriday 2009-05-11
  • 打赏
  • 举报
回复
b/s里的timer好像就是你说的问题,停不下来.
所以,在实际的应用中,我宁愿在页面中隐藏一个iframe去内嵌一个定时刷新的页面去做对应的操作.
lianglei9810 2009-05-11
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 shadow841112 的回复:]
引用 13 楼 zzxap 的回复:
timer判断一下form是否存在,不存在就不执行了。


请问如何判断?有现成的方法吗?IsClientConnected尝试了,不可行。
[/Quote]

哦 这个方法貌似可以 1 js判断 window.location.href==""?
2 代码判断 Request.Url==""?
qb81195235 2009-05-11
  • 打赏
  • 举报
回复
学习!
zzxap 2009-05-11
  • 打赏
  • 举报
回复
bs用updatepanel flash和其它东西放在不同的updatepanel内,

这样其他东西postback就不会影响到flash的postback
bao_yan 2009-05-11
  • 打赏
  • 举报
回复

帮顶....


up .
加载更多回复(22)

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧