3

C#で記述されたWindowsフォームアプリケーションがあります。フォームのタイトルを頻繁に更新しますが、タイトルが変更されてから、タスクバーに表示されるタイトルが更新されるまでにかなりの遅れがあります。

プログラムのタスクバーのエントリを強制的に更新/再描画するためのクリーンな方法は何ですか?それができない場合、どうすればタスクバー全体を強制的に再描画できますか?

詳細:タスクバーの更新の遅延は約100ミリ秒に固定されていることがわかりましたが、これはForm.Textが最後に変更された日時に基づく遅延のようです。それよりも速くテキストを変更した場合、たとえば10ミリ秒ごとに、Form.Textが少なくとも約100ミリ秒間変更されないままになるまで、タスクバーは更新されません。

OS:Vista32。

4

4 に答える 4

2

タイトルを更新した後、Form.Refresh()を呼び出そうとしましたか?

編集:

タイトルの更新をループで実行している場合は、次の行に沿って何かを実行する必要がある場合があります。

        this.Invalidate();
        this.Update();
        Application.DoEvents();
于 2008-12-19T08:51:37.680 に答える
2

タスク バーの更新が 100 ミリ秒を超えると、とにかくユーザーが解決するには速すぎます。おそらく、ある種の進行状況またはステータス インジケーターをユーザーに表示していると思いますか?

もしそうなら、あまりにも多くの UI 更新を不必要に行うことで、アプリを不自由にしていることになります。その処理時間は、顧客の仕事を完了するために使用する方が適切です。

あなたがやろうとしていることのUIデザインの側面を再検討する必要があると思います.

于 2009-01-03T10:54:58.730 に答える
1

簡単なテストをしただけです。変更は非常に瞬時に行われます。見た目から、それは間違いなく500ミリ秒未満です。より高いレートでタイトルを更新する必要がある場合は、あまりお勧めしません。一般的に、1 秒あたり 2 回という最速の更新率を見てきました。

編集: keypress イベントを使用してテストしました。キーを押し続けて高速リピートすると、キーを放すまで更新されません。したがって、セットアップと同じシナリオ。

ところで、なぜ 10 ミリ秒ごとに更新する必要があるのですか? Thread.Sleep(timeout)50 ミリ秒未満のタイムアウトは正確ではないことに注意してください。また、10 ミリ秒のタイムアウトは 100 Hz に等しくなります。ハイエンド ディスプレイを使用していない限り、数フレームを逃すことになります。一般的な液晶ディスプレイのリフレッシュレートは60Hzです。そして、私たちの目は 25Hz より速いものを区別できません。したがって、アニメーション化する場合は、40 ミリ秒の遅延で十分です。一般的に、単純なアニメーションには 15Hz (67ms) をお勧めします。テキストをスクロールしたいだけなら、2Hzで十分です。何でも速くすると、ユーザーはめまいがします。

于 2008-12-19T09:57:44.770 に答える
1

フォームで次のようなコードを使用していますか?:

    private void Form1_Load(object sender, EventArgs e)
    {
        Timer t = new Timer();
        t.Interval = 10;
        t.Tick += new EventHandler(t_Tick);
        t.Start();
    }

    int aa = 0;

    void t_Tick(object sender, EventArgs e)
    {
        this.Text = aa++.ToString();
    }

私にとっては問題なく動作します-フォームとタスクバーの間にラグはまったくありません。

GUI スレッドをロックしておらず、ループで Application.DoEvents を呼び出していませんか?

私は新しい Windows 7 ベータ版を使用しているため、動作が異なる可能性はわずかです。

于 2009-01-03T11:04:16.217 に答える