作者dabiddabid (dabid')
看板C_Sharp
标题[问题] Threading.Timer 问题
时间Thu Mar 5 15:27:48 2015
小弟在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打完没检查
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 118.163.51.121
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_Sharp/M.1425540474.A.B97.html
1F:→ Litfal: 你的fileCount宣告在哪里?而且两个大小写不一样是纯笔误吗 03/05 17:02
2F:→ Litfal: 还有你的period设多久? 是说我不太懂你为什麽要这样用 03/05 17:05
3F:推 TameFoxx: fileCount跟Filecount是一样的吗? 03/05 17:56
4F:推 TameFoxx: 你应该是有重复进入 所以会有问题 03/05 18:02
5F:推 TameFoxx: 把filecount++跟超过5return写到处理档案前面 03/05 18:38
※ 编辑: dabiddabid (118.163.51.121), 03/06/2015 11:28:06
6F:→ Litfal: 牵涉到多续,比较正规的做法应该是用锁,请参考 03/06 16:40
8F:推 GoalBased: timer2Running 是甚麽? 03/09 09:38
9F:→ GoalBased: 应该是跟我上面一楼说的一样,用LOCK 03/09 09:38
10F:→ dabiddabid: 感谢大家,问题经由T大已经解决 03/09 15:29