作者proach (pazroach)
看板C_Sharp
標題[問題] 避免某method重複被呼叫
時間Mon Sep 20 15:14:32 2010
我現在的程式,把 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
1F:→ james732:你可以用 lock 09/20 15:30
2F:→ SDNiceBoat:用lock是不是會在前一個執行緒執行完畢時,自動執行下 09/20 16:11
3F:→ SDNiceBoat:一次點擊的MouseMove evnet? 09/20 16:12
4F:→ SDNiceBoat:還有..... 我記得..... 在MouseMove event處離完畢時, 09/20 16:13
5F:→ SDNiceBoat:才會再執行下個動作..... 除非用多個執行緒..... 09/20 16:14
6F:→ SDNiceBoat:之前在類似的方法裡面放無窮迴圈檢查東西,結果整個卡 09/20 16:15
7F:→ SDNiceBoat:注沒回應..... 09/20 16:15
8F:→ jlovet:按下去就把按鈕disable 09/20 17:05
10F:→ remmurds:一樓完全搞錯lock的意思了吧? 09/20 18:29
11F:推 horngsh:james大沒說錯, C#內的critical section就是要用lock(){} 09/20 21:06
12F:→ andymai:很想看看Sample Code~總覺得事情沒這麼複雜... 09/20 21:12
13F:→ andymai:抱歉~用貫了←→的方向鍵,又剛好和下一篇文章隔開Orz... 09/20 21:14
14F:→ james732:我一直在想說我搞錯了什麼... 09/20 22:21
15F:推 horngsh:j大你沒說錯,他們可能不知道critical section的三個特性. 09/21 06:45
16F:→ remmurds:原PO又沒有說他把要執行的Method用另一個thread跑 怎麼會 09/22 16:47
17F:→ remmurds:扯到lock? 怎麼會扯到critical section? 09/22 16:47
18F:→ remmurds:MouseEvent觸發時還是在主thread中 根本沒有critical 09/22 16:48
19F:→ remmurds:section的問題 搞不懂這跟lock有啥關聯 09/22 16:48
20F:推 tvbic:這跟lock有啥關係 09/22 20:10
21F:推 SDNiceBoat:critical section是什麼東西? = = 09/22 20:23
22F:→ james732:lock並不是只有多執行緒的情況會用到... 09/22 20:54
23F:推 SDNiceBoat:聽說遞迴遇到lock會卡住,不過沒遇過..... 09/23 02:02
24F:→ SDNiceBoat:也沒試過.... 09/23 02:03
25F:推 horngsh:即使是在同一支THREAD中跑也一樣可能要用到LOCK, 如timer 09/25 08:57
26F:推 horngsh:TICK event中的碼有"重入"問題時,就要用lock(){}去包住. 09/25 08:58