1

トラックバーと数値のアップ/ダウン (とりわけ) については、値が変更されるたびに発生するイベントのように、変更間の遅延が非常に短いようです。

値が変更されるたびに、処理にかなりの時間がかかるいくつかの関数を実行するため、これが問題を引き起こしています(入力のサイズに応じて約100〜200ミリ秒など)

マウス ホイールを使用して値を増減すると、4 つの変更イベントが登録され ("changed!" がデバッグ コンソールに 4 回出力される)、関数が 4 回実行されることに気付きました。これはおそらく、マウス ホイールの設定です。

トラックバーを手動でクリックして「大幅に増加」させても、2 つの変更イベントが登録されます。

値が変化したときに関数を実行したいのですが、1 回のマウス ホイールのスクロールで 4 つの呼び出しがトリガーされるまでにはなりません。最新の値が必要です。

解決策は、ユーザーが手動でボタンを押してコマンドを実行するように強制することですが、ある種の「リアルタイム」更新が必要です。

4

2 に答える 2

2

数値制御器のイベントにフラグを設定させます。Timerフラグをチェックし、設定されている場合は実際のメソッドを呼び出してフラグをクリアする、500 ミリ秒ごとに実行されるコントロールを追加します。最後の値セットが確実に処理されるようにする場合は、最初にフラグをクリアします。

于 2012-07-27T21:48:15.687 に答える
0

Jon of All Trades の提案を拡張します。

単純なフラグの代わりに、DateTime?. イベントが発生したら、 を設定しeventLastTriggered = DateTime.Nowます。次に、タイマーの Tick ハンドラーでこれを行います

private void timer_Tick(object sender, EventArgs e)
{
    if (eventLastTriggered.HasValue
        && (DateTime.Now - eventLastTriggered.Value) >= UpdateDelay)
    {
        eventLastTriggered = null; // reset it so we don't update again
        Update();
    }
}

static readonly TimeSpan UpdateDelay = TimeSpan.FromMilliseconds(whatever);

一定の更新遅延が発生しますが、更新スパムは発生しません。最良の結果が得られるように UpdateDelay を調整できます。

于 2012-07-27T22:17:00.707 に答える