日期:2014-05-17  浏览次数:20994 次

C#移动过程的暂停怎么实现?
    我用C#写的汉诺塔的图形界面,当我点击button1时开始移动汉诺塔,当我点击button2时会暂停程序,再当我点击button3时会继续执行汉诺塔函数,当然,可以直接在点击button1时开始,再次点击时暂停,再次点击时继续,但现在的关键是怎么实现暂停呢?暂停之后又怎么继续呢?我原来是这么想的,循环向消息队列发送WM_SIZE或者WM_PAINT消息直到要求继续移动,因为我注意到当我移动窗口的时候,移动的过程会暂停,但是又有一个问题,我发送之后不但暂停了,而且窗口死掉了,不知道大侠们有什么建议啊!!!!

------解决方案--------------------
“移动”是一个定时执行过程,例如 Interval 等于 50毫秒的定时器驱动。在每一帧处理时间,你都调用一个
GoNextStep();
方法,仅此而已。

顺着这个架构来开始设计你的程序,改变你的数据结构。例如,所谓的汉诺塔“计算”部分是在一个线程中执行的,它只不过是将待显示的状态压入一个堆栈,而并不显示。

你在多线程编程中遇到的 Control.BeginInvoke(....) 也是如此。