参考我目前正在构建的这个编程游戏.
我有一个类库(DLL)将有一个方法Run
,将由以下内容组成:
public class MyRobot : Robot { public void Run(} { while (true) { Ahead(200); //moves the bot 200pixels TurnLeft(90); //turns the bot by 90deg } } }
在那些方法(继承自Robot
)中,系统将使用WPF(使用BeginAnimation
或DispatcherTimer
)来为机器人设置动画.
现在,问题是我没有在完成当前方法之前返回(即,转到下一个方法)的方法,因为这将导致动画一起发生,并且在无限循环中(如一个以上),这尤其不好.
我的问题是,在完成动画之前阻止方法返回的最佳方法是什么?
我当前bool
在Robot
class(isActionRunning
)中有一个标记为true
动作开始运行时,然后更改为false
动画回调(Completed
如果使用则使用该事件BeginAnimation
).
在每个方法结束时(在调用之后BeginAnimation
),我放置了以下循环:
while (isActionRunning) { Thread.Sleep(200); //so that the thread sleeps for 200ms and then checks again if the animation is still running }
这样在动画完成之前该方法不会返回.
但我觉得这不是正确的方法.
任何人都可以指导我做到最好吗?
从锁中建立信号装置是疯狂的; 只需使用框架中已存在的信号设备.
http://msdn.microsoft.com/en-us/library/system.threading.autoresetevent.aspx
那就是:线程一说"嘿线程二,开始这个动画,并在你完成时用这个等待句柄发信号." 线程一等待等待句柄.线程2启动动画,并在其完成事件中,向waithandle发出信号.线程一然后再次醒来并说"嘿线程二,开始这个其他动画......"