[問題] 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