好的,所以我们有一个程序,我们要在其中为 WinForm 上的控件设置动画,然后恢复剩余代码块的后续操作。这是示例代码。
该功能在WinForm上,大概在主线程上运行
Private void DoThisWork();
{
do some work here
animateControls()
//<NEED TO PAUSE HERE WHILE THE GUI ANIMATES AND UPDATES DISPLAYING THE ANIMATION OF THE CONTROL>
//Tried Option 1: thread.sleep. When we do this the main thread blocks and the animation is //not seen. The control is directly painted at x1,y1 and thats it, the intermediate rendering is not seen
// Tried Option 2: Application.DoEvents. This works very well except that the CPU maxes out and the animation then appears very jittery
continue doing remaining work // must execute only after animateControls() completes the animation part.
}
现在,animateControls()
它只是一个计时器上的函数,将控件从点 (x,y) 移动到 (x1,y1),这大约需要 3 秒。
SuspendLayout 和 ResumeLayout 不会强制 GUI 更新,因为 thread.sleep 导致主线程阻塞,所以一切实际上都处于停滞状态。
使用不同的线程为 GUI 设置动画似乎没有帮助,因为我仍然需要完成整个动画。
此外,我无法在动画代码中添加任何内容,因为它是从多个函数调用的,因此被用作通用函数。