作者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