Timer立刻停止问题

小婷0-0 2014-10-21 03:46:11
目标:在web页面中,有两个按钮,分别是开始和结束。点击开始按钮,利用timer在页面上滚动显示数据,点击结束按钮数据滚动停止,停留在当前的数据。
问题:点击结束按钮,不能立刻运行这个按钮的click事件,要过一会才能运行。这是怎么回事呢?怎么解决呢?
...全文
590 50 打赏 收藏 转发到动态 举报
写回复
用AI写文章
50 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
许多种类的企业应用程序,根本不是 asp.net 程序员的能力范围。一个小公司经不去随便“玩儿”的。
  • 打赏
  • 举报
回复
晕,你总是在“本地电脑”上把 asp.net 看成 winform/WPF/Silverlight 程序一样去玩儿吗?你们没有放到互联网上去看看刷新页面的用户体验的经验吗?
小婷0-0 2014-10-23
  • 打赏
  • 举报
回复
引用 47 楼 zhi_ai_yaya 的回复:
[quote=引用 46 楼 zt0226 的回复:] [quote=引用 45 楼 zhi_ai_yaya 的回复:] 能否回答下这个问题:timer的interval 被你设成了多少毫秒?
2000毫秒[/quote] 2000ms,前台后台交互的通信消耗+视觉滞留,差不多了吧~ 没删sleep(1000)那行代码前,就不一定了。。 你可以试试不断调整timer的interval 值,从500,1000,2000,5000,测试一下~[/quote] 我测试了一下,不断地调整timer的interval 值,随着间隔的增大,滚动的速度也在减慢。这个间隔时间的长短没有影响到停止暂停的缓慢。
我叫小菜菜 2014-10-23
  • 打赏
  • 举报
回复
引用 46 楼 zt0226 的回复:
[quote=引用 45 楼 zhi_ai_yaya 的回复:] 能否回答下这个问题:timer的interval 被你设成了多少毫秒?
2000毫秒[/quote] 2000ms,前台后台交互的通信消耗+视觉滞留,差不多了吧~ 没删sleep(1000)那行代码前,就不一定了。。 你可以试试不断调整timer的interval 值,从500,1000,2000,5000,测试一下~
小婷0-0 2014-10-23
  • 打赏
  • 举报
回复
引用 45 楼 zhi_ai_yaya 的回复:
[quote=引用 44 楼 zt0226 的回复:] [quote=引用 42 楼 zhi_ai_yaya 的回复:] [quote=引用 13 楼 zt0226 的回复:] [quote=引用 11 楼 zhi_ai_yaya 的回复:] 先把关键的几个函数代码贴出来。 前台和后台之间交互,是有一定的延迟(一般小于1s)。
请你帮我看看我这个,我这个是两台称重仪,timer负责接收数据,并滚动显示在页面上。[/quote] 很抱歉我也没看懂。只是觉得好蛋疼。 能问一下timer的interval 被你设成了多少毫秒吗?如果是我在写这段代码,我看到这么不确定的滚动,我会把这个interval 设成60*1000ms甚至更大,然后在1分钟内单步调试看结果。 还有一个问题,多线程读写队列,要么用锁,要么用同步队列,否则总会出错的。[/quote] 我知道哪里错了,在代码里面有一个让线程停止1秒的代码,把那删了就可以了。也不知道为什么删了就可以了。看你们说的我的代码是不是问题很多呢?我那滚动的那些数据是在模拟从称重仪读取出来的数据。[/quote] 能否回答下这个问题:timer的interval 被你设成了多少毫秒?[/quote] 2000毫秒
我叫小菜菜 2014-10-23
  • 打赏
  • 举报
回复
引用 44 楼 zt0226 的回复:
[quote=引用 42 楼 zhi_ai_yaya 的回复:] [quote=引用 13 楼 zt0226 的回复:] [quote=引用 11 楼 zhi_ai_yaya 的回复:] 先把关键的几个函数代码贴出来。 前台和后台之间交互,是有一定的延迟(一般小于1s)。
请你帮我看看我这个,我这个是两台称重仪,timer负责接收数据,并滚动显示在页面上。[/quote] 很抱歉我也没看懂。只是觉得好蛋疼。 能问一下timer的interval 被你设成了多少毫秒吗?如果是我在写这段代码,我看到这么不确定的滚动,我会把这个interval 设成60*1000ms甚至更大,然后在1分钟内单步调试看结果。 还有一个问题,多线程读写队列,要么用锁,要么用同步队列,否则总会出错的。[/quote] 我知道哪里错了,在代码里面有一个让线程停止1秒的代码,把那删了就可以了。也不知道为什么删了就可以了。看你们说的我的代码是不是问题很多呢?我那滚动的那些数据是在模拟从称重仪读取出来的数据。[/quote] 能否回答下这个问题:timer的interval 被你设成了多少毫秒?
小婷0-0 2014-10-23
  • 打赏
  • 举报
回复
引用 42 楼 zhi_ai_yaya 的回复:
[quote=引用 13 楼 zt0226 的回复:] [quote=引用 11 楼 zhi_ai_yaya 的回复:] 先把关键的几个函数代码贴出来。 前台和后台之间交互,是有一定的延迟(一般小于1s)。
请你帮我看看我这个,我这个是两台称重仪,timer负责接收数据,并滚动显示在页面上。[/quote] 很抱歉我也没看懂。只是觉得好蛋疼。 能问一下timer的interval 被你设成了多少毫秒吗?如果是我在写这段代码,我看到这么不确定的滚动,我会把这个interval 设成60*1000ms甚至更大,然后在1分钟内单步调试看结果。 还有一个问题,多线程读写队列,要么用锁,要么用同步队列,否则总会出错的。[/quote] 我知道哪里错了,在代码里面有一个让线程停止1秒的代码,把那删了就可以了。也不知道为什么删了就可以了。看你们说的我的代码是不是问题很多呢?我那滚动的那些数据是在模拟从称重仪读取出来的数据。
於黾 2014-10-23
  • 打赏
  • 举报
回复
引用 42 楼 zhi_ai_yaya 的回复:
[quote=引用 13 楼 zt0226 的回复:] [quote=引用 11 楼 zhi_ai_yaya 的回复:] 先把关键的几个函数代码贴出来。 前台和后台之间交互,是有一定的延迟(一般小于1s)。
请你帮我看看我这个,我这个是两台称重仪,timer负责接收数据,并滚动显示在页面上。[/quote] 很抱歉我也没看懂。只是觉得好蛋疼。 能问一下timer的interval 被你设成了多少毫秒吗?如果是我在写这段代码,我看到这么不确定的滚动,我会把这个interval 设成60*1000ms甚至更大,然后在1分钟内单步调试看结果。 还有一个问题,多线程读写队列,要么用锁,要么用同步队列,否则总会出错的。[/quote] 在BS中使用多线程,本身就是很蛋疼的一件事
於黾 2014-10-22
  • 打赏
  • 举报
回复
微软为了让web开发跟winform开发感觉上差不多,后台做了大量的工作 但是绝不是web开发就跟winform开发一样了 它毕竟还是不一样
於黾 2014-10-22
  • 打赏
  • 举报
回复
你总以为,页面中的按钮就跟winform中的按钮一样,采用事件驱动,点一下就应该执行事件函数 虽然asp.net封装的很傻瓜,让你平时应用起来感觉和winform没什么区别一样 但是你不真正了解这个机制,而滥用winform里的代码,就会引发意想不到的问题
於黾 2014-10-22
  • 打赏
  • 举报
回复
引用 36 楼 zt0226 的回复:
我的取随机数是在模拟从称重仪取到的数据,我觉得我这个思路挺清晰的,我想知道我的问题到底出在哪里?为什么这样写会出现问题。
因为你整个思路都是基于winform的前台窗口,后台代码的机制 而不是BS架构中客户端/服务端的机制 根本没有考虑到客户端和服务端需要通信,通信又是怎样的过程,这个问题
忘丿殇 2014-10-22
  • 打赏
  • 举报
回复
引用 36 楼 zt0226 的回复:
[quote=引用 33 楼 Z65443344 的回复:] 我觉得你整个思路都需要重新缕清 业务逻辑需要重新设计 什么取随机数什么的,都是在干什么,完全看不出这样做有任何意义 做方案要从需求出发,找到一个合适的方案,再实施 不要老靠拍脑袋想
我的取随机数是在模拟从称重仪取到的数据,我觉得我这个思路挺清晰的,我想知道我的问题到底出在哪里?为什么这样写会出现问题。[/quote] 最好的办法就是调试,附加到进程调试~,光看代码没用的
小婷0-0 2014-10-22
  • 打赏
  • 举报
回复
引用 33 楼 Z65443344 的回复:
我觉得你整个思路都需要重新缕清 业务逻辑需要重新设计 什么取随机数什么的,都是在干什么,完全看不出这样做有任何意义 做方案要从需求出发,找到一个合适的方案,再实施 不要老靠拍脑袋想
我的取随机数是在模拟从称重仪取到的数据,我觉得我这个思路挺清晰的,我想知道我的问题到底出在哪里?为什么这样写会出现问题。
於黾 2014-10-22
  • 打赏
  • 举报
回复
BS架构中,IE是如何和服务端交互的,这个最应该先了解清楚 它绝对不是单机程序中窗口和代码的关系
於黾 2014-10-22
  • 打赏
  • 举报
回复
还有BS模式,什么是前台代码,什么是后台代码,各种控件的用法,AJAX,JS这些,都应该先了解了解 不要老拿单机的思路去做BS
於黾 2014-10-22
  • 打赏
  • 举报
回复
我觉得你整个思路都需要重新缕清 业务逻辑需要重新设计 什么取随机数什么的,都是在干什么,完全看不出这样做有任何意义 做方案要从需求出发,找到一个合适的方案,再实施 不要老靠拍脑袋想
小婷0-0 2014-10-22
  • 打赏
  • 举报
回复
引用 27 楼 dongxinxi 的回复:
[quote=引用 24 楼 y8932809 的回复:] 时间越短,等待的时间就越长,可能是因为等待时间越短,每个任务就可以越快执行完,那么例如:80 个任务中就有越多的任务可以用到前面任务执行完后释放掉的线程,也就有越多的任务不必去线程池申请新的线程避免多等待半秒钟的申请时间,而Timer 并不会去关心线程池申请前80 个任务的时间长短,只要它没有执行到timer.Dispose(),它就会每隔10 毫秒激发一次响应时间,不管前80 次任务执行时间是长还是短,timer 都在第80 次任务才执行Dispose,执行Dispose 后timer 就不会激发新的事件了,但是如果前80 次任务申请的时间越长,那么timer 就会在前80 次任务申请的时间内激发越多响应事件, 那么线程池中等待队列中就会有越多的响应函数等待申请线程,System.Threading.Timer 没有机制取消线程池等待队列中多余的申请数,所以导致等待时间越长,80 次后执行的任务数越多。
80个肯定不会出现这种问题的,线程的初始化主要是分配堆栈空间要点时间,启动线程是系统自动调度的 曾经做过模拟1000个webservice客户端,循环调用webservice的测试 用线程池和线程并没有发现任何明显区别,更没发现用线程性能就快了(注意我是先用循环初始化好了1000个Thread),然后再次循环启动的,也没发现快了) 用的就是普通的双核PC机[/quote] 但是,在执行timer_tick的时候把timer.enable=false了。他只能再接到Timer.Enabled = true;才会间隔多少时间后再执行timer_tick。
小婷0-0 2014-10-22
  • 打赏
  • 举报
回复
引用 29 楼 superior_yong 的回复:
[quote=引用 26 楼 zt0226 的回复:] [quote=引用 23 楼 superior_yong 的回复:] 滚动你是用线程队列做的吧???
不是,滚动我是在页面上有一个gridview,把要滚动的记录放在datatable里面,在把gridview的数据源设为datatable。[/quote] Thread f = new Thread(MessQueue.Receive);那你这个线程是用来干嘛的~[/quote] 我这个把重量去读过来之后,可以在StartLinsterToGetWeightA()方法中看到调用messqueue.AddWeightData(....),messqueue.AddWeightData(....)把数据存到消息队列中。Thread f = new Thread(MessQueue.Receive);用来从消息队列中取数据,存到数据库和csv文件。
小婷0-0 2014-10-22
  • 打赏
  • 举报
回复
我这个把重量去读过来之后,可以在StartLinsterToGetWeightA()方法中看到调用messqueue.AddWeightData(....),messqueue.AddWeightData(....)把数据存到消息队列中。Thread f = new Thread(MessQueue.Receive);用来从消息队列中取数据,存到数据库和csv文件。
忘丿殇 2014-10-22
  • 打赏
  • 举报
回复
引用 26 楼 zt0226 的回复:
[quote=引用 23 楼 superior_yong 的回复:] 滚动你是用线程队列做的吧???
不是,滚动我是在页面上有一个gridview,把要滚动的记录放在datatable里面,在把gridview的数据源设为datatable。[/quote] Thread f = new Thread(MessQueue.Receive);那你这个线程是用来干嘛的~
加载更多回复(30)

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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