Windows 7具有一项非常棒的新功能,应用程序可以通过状态栏报告当前活动的进度。例如,使用Windows资源管理器复制文件时,任务栏中的应用程序图标顶部会显示一个进度条,并在更新时显示进度。
用于公开进度条的API是什么?是否有MSDN文档?
答案 0 :(得分:39)
适用于以下.NET 4或任何.NET版本的WinForms
使用Microsoft的Windows API Code Pack(正如Keeron所提到的),它非常简单。您只需使用TaskbarManager
即可。 E.g。
开始进度:
TaskbarManager.Instance.SetProgressState(TaskbarProgressBarState.Normal);
更新进度:
TaskbarManager.Instance.SetProgressValue(currentValue, maxProgressValue);
当你完成时,结束进展:
TaskbarManager.Instance.SetProgressState(TaskbarProgressBarState.NoProgress);
你可以做的更多,但这应该让你开始,可能就是你所需要的一切。
对于使用WPF的.NET 4及更高版本
您可以使用System.Windows.Shell.TaskbarItemInfo。例如。在主窗口的Xaml中,您需要添加:
<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线程来更新任务栏。 / p>
答案 1 :(得分:12)
MSDN杂志上有一篇关于the new taskbar APIs的好文章。是的,该功能非常棒: - )
基本上,这都是关于实施IFileOperation
的。有一篇关于在托管代码here中使用它的文章。
答案 2 :(得分:5)
答案 3 :(得分:1)
我写了一篇关于在C#中实现Windows 7任务栏进度API的文章(参见:Windows 7 Taskbar Progress Bar with C# and .NET)。控件是开源的(BSD),并有C#和VB.NET的示例项目。
这样您就不必从头开始转换C ++代码。