代码的借口,这是一个烂摊子,但我试图找出事情没有太多的使用谷歌。
问题:我有一个OnKeyDown
方法,它开始把屏幕上的正方形向右移动,如果用户按下A
让它停下来并向左移动,我真的不知道该怎么做。我在这里做,但我想如果我使用一个Task.Run
,我可以监听其他输入,如果一个键被按下,它可以返回true
,并从while循环中断,我会调用另一个方法来左移。这可能是一个非常错误的方法,但我真的被困在这里了,我还不知道另一种方法来做这件事。
提前感谢。
添加所有编码:这里的其他部分只有绘制Grid方法和OnPaint方法
第一个
1条答案
按热度按时间s4chpxco1#
代码的问题不在于
Task.Run
,而在于您阻止了UI正确响应消息泵上的所有更新。此代码:
相当于:
Task
在这里没有做任何有价值的事情。你的问题是
while
循环没有将控制权返回给消息泵。你需要一个计时器来完成你的动作,而不是一个循环。具体操作如下:
启用时,定时器每
Velocity
毫秒触发一次,并更新this.X
。按D
键可切换定时器的开关。简单。