【发布时间】:2014-01-09 10:23:54
【问题描述】:
我编写模拟寻路算法的应用程序。我可以运行算法或单步执行(如调试)。但是当我运行算法时,在算法完成之前我无法绘制任何更改。
private void menu_run_Click(object sender, EventArgs e)
{
algorithm.Reset();
while (algorithm.status == Algorithm.Status.Searching )
{
algorithm.MakeStep();
if (this.speed != 0) System.Threading.Thread.Sleep(this.speed);
drawing_area.Invalidate();
}
}
我猜是因为我在一个周期内完成所有操作,系统无法处理我触发的新消息(事件)。
那么我应该如何更改我的代码才能在每次迭代后重新绘制更改?
- 我是否应该以某种方式调用 Message Dispatcher 让他在每次迭代后处理新消息?
- 我应该创建自己的消息并使用消息在循环内完成所有工作吗?
- 或者我还有什么更优雅的方式吗?
【问题讨论】:
-
作为一个快速回答,
Application.DoEvents运行消息队列处理,因此它可能是您想要的。在Invalidate之后调用它,它应该处理重绘绘图区域。不过,Timer 组件可能会更有用。
标签: c# events message-queue