[问题] Threading.Timer 问题

楼主: dabiddabid (dabid')   2015-03-05 15:27:48
小弟在Form里面建一个Threading.Timer
目的是依序把档案读进来做初步处理
timer跑的内容大致如下 :
ex假如我读了5个档案
private void TimerCallBack2(object obj)
{
if (!timer2Running)
{
Thread.Sleep(100);
}
else
{
...
读一个档FileList[fileCount],接着处理档案......
...
FileCount ++ ;
if (FileCount == 5)//当处理到5个档就把flag设fasle
{
timer2Running = false;
FileCount = 0;
}
}
}
但我发现每次都多读一倍的档案,也就是重复跑一次所有档案
我去观察内不运作发现就算timer2Running == False他还是跑进去读档
fileCount也确实被重设为0
第一次使用搞半天也搞不好,我的档案处理耗费时间较多,是这个的问题吗
有办法把这种timer停下来吗?
sorry打完没检查
作者: Litfal (Litfal)   2015-03-05 17:02:00
你的fileCount宣告在哪里?而且两个大小写不一样是纯笔误吗还有你的period设多久? 是说我不太懂你为什么要这样用
作者: TameFoxx (foxx)   2015-03-05 17:56:00
fileCount跟Filecount是一样的吗?你应该是有重复进入 所以会有问题把filecount++跟超过5return写到处理档案前面
作者: Litfal (Litfal)   2015-03-06 16:40:00
牵涉到多续,比较正规的做法应该是用锁,请参考https://msdn.microsoft.com/zh-tw/library/dd78zt0c.aspx
作者: GoalBased (Artificail Intelligence)   2015-03-09 09:38:00
timer2Running 是什么?应该是跟我上面一楼说的一样,用LOCK
楼主: dabiddabid (dabid')   2015-03-09 15:29:00
感谢大家,问题经由T大已经解决

Links booklink

Contact Us: admin [ a t ] ucptt.com