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