一个关于winfrom timer的问题

问题描述

最近在学c#,学到timer的时候我试着用在以前写的一个程序上,大致是这样的:timer=newXXXX;timer.Interval=5000;timer.Tick+=newEventHandler(timer_Tick);然后在timer的tick中启动多线程每个400ms执行一个ping程序,再记录下ping的信息。结果我发现得到的日志里经常有一些重复的项。但是当我不用timer而单纯用控件去触发一样的函数时,就不会有这个问题,所以我想问下,是不是timer有什么额外的机制,会启动不止一次?例如单次执行得到:10:30:10010:30:50010:30:90010:31:30010:31:70010:32:100但是使用timer后得到10:30:10010:30:10010:30:50010:30:50010:30:90010:30:90010:31:30010:31:30010:31:70010:31:70010:32:100

解决方案

解决方案二:

放代码
解决方案三:

然后在timer的tick中启动多线程每个400ms执行一个ping程序,再记录下ping的信息。这块的问题吧还有就是你的400ms就另外启动一个线程去记录这个ping的信息了?
解决方案四:

只能说明你线程没有做同步或加锁,导致随机写入,同一时间可能多个线程都在写入
解决方案五:

timer.Interval=5000;你把它改小一点你就明白了
解决方案六:

然后在timer的tick中启动多线程每个400ms执行一个ping程序,再记录下ping的信息。你想想,每一次tick就会创建一个线程,那最后会有多少个线程
解决方案七:

我可怜的1楼的帖子又被吃了。。。。FXXKCSDN
解决方案八:

1:时间中断处理函数一定要lock一下;2:进入中断前停止计时器,结束中断前重启定时器然后再看看PS:ping和写日志可能比较耗时间

时间: 2024-10-28 09:39:42

一个关于winfrom timer的问题的相关文章

线程-关于一个cache和timer的代码处理

问题描述 关于一个cache和timer的代码处理 需要写一个接口. 业务:把一些数据放入cache里,数据有一个发送时间,这个发送时间到了,才执行入库操作. 对于chache里数据还能执行立即发送,停止,等待这些指令. 现在我不清楚,在chche里怎么去判断哪一条数据时间到了.去执行入库操作. 需要给cache放置一个定时器(一个线程),根据cache里面的数据发送时间,cache丢出这条数据,进行入库.而不是每条数据放置一个定时器(这样就是非常多的线程).有什么好的办法,可以让cache(根

用户-问一个关于winfrom 关于开机的自启动的问题 详细是。。。

问题描述 问一个关于winfrom 关于开机的自启动的问题 详细是... 问一个关于winfrom 关于开机的自启动的问题 目前有一个开机自启动的程序叫form1.exe 一台电脑上有两个用户 admin 和 test 当admin用户登陆的时候 form1.exe程序启动了 这时候另一个人远程我的电脑 用test用户登陆 同样form1.exe 还是启动了 怎么样在多个电脑用户下 form1.exe程序只启动一次? 可以控制吗? 解决方案 可以通过互斥体实现防止程序多开,但是有个问题,程序一旦

一个简单的Timer Service

Web-TimeService用于定时调用(触发)应用,EJB2.1也提供了TimerService,但现在有的application server不支持,有的就根本没有用到ejb,所以我写了一个简单的TimerSerivce Public class TimerService { public static final long p = 1000*60*60; Timer timer = new Timer(false); TimerSchedule schedule = null; publ

一个简单的Timer动画,就是没显示,求指点啊

问题描述 import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.awt.Graphics;public class MovingCar extends JFrame{public MovingCar(String s){super(s);CarPanel MyCar=new CarPanel();add(MyCar);}public static void main(String [] args){J

datagridview-关于Winfrom datagridView 刷新数据

问题描述 关于Winfrom datagridView 刷新数据 首先,我这个窗体已经使用了一个自定义的timer了,但是我里面还有两个选项卡, 每个选项卡又有一个DataGridView,而且都要实时更新数据,我测试了加上timer 去对两个选项卡里面的datagridview 进行刷新,会卡死(假死),我绑定的数据是查出来一个dataTable, 然后直接用DataSource= ..来帮顶,求高手支支招哇!!! 解决方案 数据量大,绑定datasource当然会卡死.首先,你不应该轮询.其

Community Server专题七: Job & Timer

server 在CSHttpModule.cs文件中的Init方法下有这样一行: 接着在Dispose方法中还有这么一行: Job?什么是Job,在CS运行过程中有什么用途,又是如何运行的?这篇专题将叙述Job的工作流程. 你可以这里理解CS中的Job:"干一些零碎事情的钟点工". 讲解之前要先了解一个接口:IDisposable,MSDN是这样定义的:定义一种释放分配的非托管资源的方法.当托管对象不再使用时,垃圾回收器会自动释放分配给该对象的内存,不过,进行垃圾回收的时间不可预知.另

HTML5实现经典坦克大战坦克乱走还能发出一个子弹

在上篇文章中为大家介绍了如何使用HTML5实现一个可以移动的小坦克,而在本文将带领大家进入坦克大战,喜欢HTML5的朋友可不要错过了哈     复制代码 代码如下: <pre name="code" class="html">tank.html</pre><pre name="code" class="html"><!DOCTYPE html> <html> <

使用Timer执行定时任务

一.Timer概述 在Java开发中,会碰到一些需要定时或者延时执行某些任务的需求,这时,我们可以使用Java中的Timer类实现. 二.Timer介绍 Timer是一个定时器类,通过该类可以为指定的定时任务进行配置,所在jar包路径:java.util.Timer Timer定时器实例有多种构造方法: Timer() // 创建一个新计时器 Timer(boolean isDaemon) //创建一个新计时器,可以指定其相关的线程作为守护程序运行 Timer(String name) //创建

asp.net使用Timer的问题

问题描述 我只需要在一个页面上做计时器,其中代码如下:protectedvoidPage_Load(objectsender,EventArgse){if(!IsPostBack){Timert=newTimer(1000);t.Elapsed+=newElapsedEventHandler(this.TimerEventFunction);t.AutoReset=true;t.Enabled=true;}}protectedvoidTimerEventFunction(Objectsender