[問題] 避免某method重複被呼叫

看板C_Sharp作者 (pazroach)時間13年前 (2010/09/20 15:14), 編輯推噓7(7019)
留言26則, 7人參與, 最新討論串1/2 (看更多)
我現在的程式,把 MouseMove evnet掛到一個自己寫的method上, 此method執行起來需要一點時間,所以我希望當第一次的運算尚未結束時, 新的 MouseMove動作不會去呼叫,避免再執行一次。 我現在的方法是,宣告一個 public bool MethodIsWorking; 進入 method後,檢查是否是 true, 是的話就 return, 否則設定為 true, 離開前重為 false. 這方法好像沒有用?我在 if( MethodIsWorking ) return; 處設立中斷點, 重來沒有觸發過。 請問是我的方法有問題?還是 C#內本來就會等第一次的 MouseMove event 處離完畢才呼叫第二次? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.61.242.17

09/20 15:30, , 1F
你可以用 lock
09/20 15:30, 1F

09/20 16:11, , 2F
用lock是不是會在前一個執行緒執行完畢時,自動執行下
09/20 16:11, 2F

09/20 16:12, , 3F
一次點擊的MouseMove evnet?
09/20 16:12, 3F

09/20 16:13, , 4F
還有..... 我記得..... 在MouseMove event處離完畢時,
09/20 16:13, 4F

09/20 16:14, , 5F
才會再執行下個動作..... 除非用多個執行緒.....
09/20 16:14, 5F

09/20 16:15, , 6F
之前在類似的方法裡面放無窮迴圈檢查東西,結果整個卡
09/20 16:15, 6F

09/20 16:15, , 7F
注沒回應.....
09/20 16:15, 7F

09/20 17:05, , 8F
按下去就把按鈕disable
09/20 17:05, 8F

09/20 18:29, , 10F
一樓完全搞錯lock的意思了吧?
09/20 18:29, 10F

09/20 21:06, , 11F
james大沒說錯, C#內的critical section就是要用lock(){}
09/20 21:06, 11F

09/20 21:12, , 12F
很想看看Sample Code~總覺得事情沒這麼複雜...
09/20 21:12, 12F

09/20 21:14, , 13F
抱歉~用貫了←→的方向鍵,又剛好和下一篇文章隔開Orz...
09/20 21:14, 13F

09/20 22:21, , 14F
我一直在想說我搞錯了什麼...
09/20 22:21, 14F

09/21 06:45, , 15F
j大你沒說錯,他們可能不知道critical section的三個特性.
09/21 06:45, 15F

09/22 16:47, , 16F
原PO又沒有說他把要執行的Method用另一個thread跑 怎麼會
09/22 16:47, 16F

09/22 16:47, , 17F
扯到lock? 怎麼會扯到critical section?
09/22 16:47, 17F

09/22 16:48, , 18F
MouseEvent觸發時還是在主thread中 根本沒有critical
09/22 16:48, 18F

09/22 16:48, , 19F
section的問題 搞不懂這跟lock有啥關聯
09/22 16:48, 19F

09/22 20:10, , 20F
這跟lock有啥關係
09/22 20:10, 20F

09/22 20:23, , 21F
critical section是什麼東西? = =
09/22 20:23, 21F

09/22 20:54, , 22F
lock並不是只有多執行緒的情況會用到...
09/22 20:54, 22F

09/23 02:02, , 23F
聽說遞迴遇到lock會卡住,不過沒遇過.....
09/23 02:02, 23F

09/23 02:03, , 24F
也沒試過....
09/23 02:03, 24F

09/25 08:57, , 25F
即使是在同一支THREAD中跑也一樣可能要用到LOCK, 如timer
09/25 08:57, 25F

09/25 08:58, , 26F
TICK event中的碼有"重入"問題時,就要用lock(){}去包住.
09/25 08:58, 26F
文章代碼(AID): #1CbmdSzk (C_Sharp)
文章代碼(AID): #1CbmdSzk (C_Sharp)