0

そのコントロールにカーソルを移動するとコントロールを右にスライドさせ、カーソルが外に出たらスライドさせようとしています。

フォームには同じアニメーションを持つ多くのコントロールが含まれているため、これらのコントロールを別のスレッドでスライドさせることにしました。問題は、スレッドを作成しControl.Invoke()てコントロールの位置を変更するために使用すると、アニメーションが完了するまでメイン UI がフリーズすることです。

私は何を間違っていますか?または、回避する方法はありますか?

編集:また使用されControl.BeginInvoke()ます。結果は同じです。

4

1 に答える 1

0

これは、UI スレッドが処理できるよりも速くコントロールを動かそうとしたときに発生します。以下のライブラリは、すべてのアニメーションに対して SINGLE グローバル 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);

これにより、c_controlコントロールが 250 ミリ秒で 100 ピクセル右に移動します。

于 2016-05-19T23:04:09.570 に答える