3

I have a Windows form application written in C#. I update the title of the form frequently, but there's a substantial lag between the title changing and the title dislayed in the taskbar being updated.

What's a clean way to force an update / redraw of the task bar's entry for my program? Failing that, how can I force a redraw of the entire task bar?

Elaboration: It turns out that the delay in updating the taskbar is fixed at about 100ms, however this seems to be a delay based on when the Form.Text was last modified. If you modify the text faster then that - say, every 10ms, the taskbar is not updated until the Form.Text has been left unchanged for at least ~100ms.

OS: Vista 32.

4

4 回答 4

2

Did you try to call Form.Refresh() after updating the title?

Edit:

If you are doing the title updates in a loop you might have to do something along the line of:

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

超过每 100 毫秒的任务栏更新将太快,用户无论如何都无法解决。大概您正在向用户显示某种进度或状态指示器?

如果是这样,您会在不必要地进行如此多的 UI 更新时削弱应用程序。处理时间最好用于完成客户的工作。

我认为您需要重新审视您正在尝试做的事情的 UI 设计方面。

于 2009-01-03T10:54:58.730 回答
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 回答
1

我只是做了一个简单的测试。变化是相当瞬间的。从外观上看,肯定是不到500ms。如果您需要以更高的速度更新标题,我不会真正推荐它。一般来说,我见过每秒两次的最快更新率。

编辑:我使用按键事件进行了测试。当我按住键快速重复时,它不会更新,直到我释放我的键。因此,与您的设置相同的场景。

顺便说一句,为什么你需要每 10 毫秒更新一次?请记住,Thread.Sleep(timeout)超时时间小于 50 毫秒是不准确的。此外,10ms 超时将等于 100Hz,除非您使用高端显示器,否则您会错过几帧。大多数普通 LCD 的刷新率为 60Hz。我们的眼睛无法区分任何比 25Hz 更快的东西。因此,如果您想制作动画,40 毫秒的延迟就绰绰有余了。一般来说,我会推荐 15Hz (67ms) 用于简单的动画。如果只是想滚动一些文本,2Hz 绰绰有余。任何更快的东西都会让用户头晕目眩。

于 2008-12-19T09:57:44.770 回答