0

当我将光标移到该控件上时,我试图将控件向右滑动,并在光标移出时向后滑动。

由于表单包含许多具有相同动画的控件,因此我决定让这些控件在不同的线程上滑动。问题是,当我创建一个线程并使用它Control.Invoke()来更改控件的位置时,主 UI 会冻结,直到动画完成。

我究竟做错了什么?或者有什么办法可以解决吗?

编辑:也使用Control.BeginInvoke(). 结果是一样的。

4

1 回答 1

0

当您尝试以比 UI 线程可以处理的速度更快的速度移动控件时,就会发生这种情况。下面的库是一个很好的例子,说明了如何为所有动画使用一个全局 FRAME-LIMITED 计时器来制作动画。

WinForm 动画库 [.Net3.5+]

一个简单的库,用于在 .Net WinForm(.Net 3.5 及更高版本)中为控件/值设置动画。基于关键帧(路径)且完全可定制。

https://falahati.github.io/WinFormAnimation/

new Animator2D(
        new Path2D(c_control.Location.X, c_control.Location.Y, c_control.Location.X + 100, c_control.Location.Y, 250))
    .Play(c_control, Animator2D.KnownProperties.Location);

这会在 250 毫秒内将c_control控件向右移动 100 个像素。

于 2016-05-19T23:04:09.570 回答