作者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://www.ptt.cc/bbs/C_Sharp/M.1425540474.A.B97.html
→ Litfal: 你的fileCount宣告在哪裡?而且兩個大小寫不一樣是純筆誤嗎 03/05 17:02
→ Litfal: 還有你的period設多久? 是說我不太懂你為什麼要這樣用 03/05 17:05
推 TameFoxx: fileCount跟Filecount是一樣的嗎? 03/05 17:56
推 TameFoxx: 你應該是有重複進入 所以會有問題 03/05 18:02
推 TameFoxx: 把filecount++跟超過5return寫到處理檔案前面 03/05 18:38
※ 編輯: dabiddabid (118.163.51.121), 03/06/2015 11:28:06
→ Litfal: 牽涉到多續,比較正規的做法應該是用鎖,請參考 03/06 16:40
推 GoalBased: timer2Running 是甚麼? 03/09 09:38
→ GoalBased: 應該是跟我上面一樓說的一樣,用LOCK 03/09 09:38
→ dabiddabid: 感謝大家,問題經由T大已經解決 03/09 15:29