代码之家  ›  专栏  ›  技术社区  ›  Goyuix

如何为Windows 7编写进度条,使其在任务栏上也能自我更新?

  •  23
  • Goyuix  · 技术社区  · 15 年前

    公开进度条的API是什么?上面有MSDN文档吗?

    4 回复  |  直到 15 年前
        1
  •  45
  •   Wilka    10 年前

    适用于任何.NET版本的.NET 4或WinForms

    使用 Windows API Code Pack 从微软(正如Keeron所提到的),这真的很简单。你只需要使用 TaskbarManager . 例如。

    TaskbarManager.Instance.SetProgressState(TaskbarProgressBarState.Normal);
    

    要更新进度,请执行以下操作:

    TaskbarManager.Instance.SetProgressValue(currentValue, maxProgressValue);
    

    完成后,要结束进度:

    TaskbarManager.Instance.SetProgressState(TaskbarProgressBarState.NoProgress);
    

    你还可以做更多的事情,但这应该能让你开始,也许就是你所需要的。

    对于.NET 4及更高版本,使用WPF

    你可以用 System.Windows.Shell.TaskbarItemInfo

    <Window.TaskbarItemInfo>
        <TaskbarItemInfo x:Name="taskBarItemInfo" />
    </Window.TaskbarItemInfo>
    

    然后,要更新进度,您可以执行以下操作:

    taskBarItemInfo.ProgressState = TaskbarItemProgressState.Normal;
    
    for (int i = 0; i < 100; i++)
    {
        taskBarItemInfo.ProgressValue = i / 100.0;
        Thread.Sleep(50); // whatever the 'work' really is
    }
    
    taskBarItemInfo.ProgressState = TaskbarItemProgressState.None;
    

    不要忘记,如果您在后台线程上执行“工作”(这对于长时间运行的任务可能是个好主意),则需要切换回UI线程以更新任务栏。

        2
  •  12
  •   sigint    13 年前

    the new taskbar APIs . 是的,这个功能非常棒:-)

    从本质上讲,这一切都是关于实施的 IFileOperation here

        3
  •  5
  •   Jeff B    9 年前

    如果您计划使用其他Windows 7任务栏功能,另一种方法是使用Microsoft提供的库:Windows API代码包for.NET Framework,该库目前已不可用 old link ,但可在 nuget .

        4
  •  1
  •   Wyatt O'Day    15 年前

    我写了一篇关于在C#中实现Windows7任务栏进度API的文章(请参阅: Windows 7 Taskbar Progress Bar with C# and .NET ).该控件是开源(BSD)的,并具有C#和VB.NET的示例项目。

    这样,你就不必从头开始转换C++代码。