2 bendanxieshi bendanxieshi 于 2015.06.09 11:32 提问

c#主窗口里timer控件设定的是1分钟执行1次,为什么每分钟内会执行多次 1C

我在主窗口中添加了几个timer和backgroundwork,一一对应,用timer去监控独立线程的执行。设定每个timer1分钟执行一次,为什么会被执行多次。代码如下:
private void sjsxjk_Tick(object sender, EventArgs e)
{
if (!SJSXJKbgw.IsBusy) //每次此独立进程还没执行完,isbusy属性仍然是 false,这是为何?
{
SJSXJKbgw.RunWorkerAsync();
}
}
private void SJSXJKbgw_DoWork(object sender, DoWorkEventArgs e)
{

        functions.timeMonitor(DateTime.Now.ToString("yyyy-MM-dd HH:00:00"), true, false, false);

    }

7个回答

bendanxieshi
bendanxieshi   2015.06.09 11:39

运行的时候,发现几个timer都会在1分钟内运行多次,这不科学啊,完全无视了timer.Interval属性设定啊,时间都跑哪去了?而且backgroundworker是isbusy属性怎么也全是false??哪位大神知道是怎么回事啊?

songhtao
songhtao   Rxr 2015.06.09 11:49

timer本来就不准的。

caozhy
caozhy   Ds   Rxr 2015.06.09 11:48

你有几个timer,你的timer设置的interval是60000么

bendanxieshi
bendanxieshi 回复caozhy: 你理解错我意思了,1个timer对应1个worker,在触发timer的时候会判断worker的isbusy属性,只有当isbusy=false的时候才会再次运行这个独立线程,6个timer和worker是独立不干扰的啊
2 年多之前 回复
caozhy
caozhy 回复bendanxieshi: 你有6个woker,如果每个worker工作的时间长过1分钟,当然会有多个运行,这有什么奇怪的。
2 年多之前 回复
bendanxieshi
bendanxieshi 是的,总共6个timer,对于6个backgroundworker,interval哪怕设置成120S,还是会出现这种情况
2 年多之前 回复
llq1024123
llq1024123   2015.06.09 14:06

我觉得是你那个判断isbusy属性有逻辑错误,实际上在判断的时候,对应的线程的时间片执行完了,应该是挂起状态,而不是busy
应该判断busy或suspend

datou431
datou431   Rxr 2015.06.09 15:40

界面Timer是不准的

frank_20080215
frank_20080215   2015.06.09 12:41

timer控件用了多个,没有同步

slmyucan
slmyucan   2015.06.09 12:52

用线程定时器,界面Timer不准的

bendanxieshi
bendanxieshi 都说timer不准啊,线程定时器有跟timer类似的功能么?
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片