C# 如何强制重新绘制我的应用程序&x27;任务栏上有什么条目?

C# 如何强制重新绘制我的应用程序&x27;任务栏上有什么条目?,c#,.net,taskbar,C#,.net,Taskbar,我有一个用C#编写的Windows窗体应用程序。我经常更新表单的标题,但是在标题更改和正在更新的任务栏中显示的标题之间有很大的延迟 强制更新/重画我的程序的任务栏条目的干净方法是什么?如果做不到这一点,我如何强制重新绘制整个任务栏 精化:原来更新任务栏的延迟是固定的,大约为100ms,但是这似乎是基于Form.Text上次修改的时间的延迟。如果你修改文本的速度超过了这个速度,比如说,每10毫秒,任务栏就不会更新,直到表单文本保持不变至少100毫秒 OS:Vista 32。更新标题后是否尝试调用F

我有一个用C#编写的Windows窗体应用程序。我经常更新表单的标题,但是在标题更改和正在更新的任务栏中显示的标题之间有很大的延迟

强制更新/重画我的程序的任务栏条目的干净方法是什么?如果做不到这一点,我如何强制重新绘制整个任务栏

精化:原来更新任务栏的延迟是固定的,大约为100ms,但是这似乎是基于Form.Text上次修改的时间的延迟。如果你修改文本的速度超过了这个速度,比如说,每10毫秒,任务栏就不会更新,直到表单文本保持不变至少100毫秒


OS:Vista 32。

更新标题后是否尝试调用Form.Refresh()

编辑:

如果您在循环中进行标题更新,您可能需要按照以下步骤进行操作:

        this.Invalidate();
        this.Update();
        Application.DoEvents();

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

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


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

如果任务栏更新速度超过100毫秒,用户无论如何都无法解决。你大概是在向用户显示某种进度或状态指示器

如果是这样的话,那么不必要地进行如此多的UI更新就是在破坏应用程序。更好地利用处理时间完成客户的工作


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

您是否在表单中使用类似的代码

    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吗


我使用的是新的Windows7测试版,所以很可能是不同的行为。

aAe,不会影响任务栏。还尝试了其他分类更新、隐藏/显示等。没有直接尝试。您是否在某种循环中执行更新?是的,应用程序是计时器。在每个刻度上,我都想将标题更新到当前剩余时间。我不认为重新绘制整个任务栏是一个好主意。我同意,因此我理想情况下只想重新绘制我的应用程序所做的条目。对于这个问题+1-我在Vista x64(但不是XP x86)上看到完全相同的效果。是否在某处记录了这种行为(MSDN)?最后我做了相当于“if(currentTicks>(_lastTitleUpdateTicks+TimeSpan.FromMillistics(150.Ticks)){update title}”的测试……我还做了一个快速测试和一个this.Text=DateTime.Now.ToLongTimeString();在一次点击按钮事件中,我的机器在不到一秒钟的时间内更新任务栏。奇怪的是,我没有看到这种行为。你是XP还是Vista?也许这是一个Vista的东西。这相当于我的代码,是的。我刚刚在我的Vista机器上测试了你的代码,但是延迟仍然存在。也许有一个外部的模糊因素?可能是Windows7做得不一样,也可能是与应用于Aero或类似系统的系统设置有关;在标题中显示进度百分比时,每100+毫秒更新一次会产生相当“起伏”的体验(相当于10帧/秒;我们的眼睛通常感觉30+帧/秒是平滑的,即约35毫秒)。