首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为Windows 7编写进度条,使其也能在任务栏上进行自我更新?

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

Stack Overflow用户
提问于 2009-07-18 02:54:11
回答 4查看 15.7K关注 0票数 24

Windows7有一个很棒的新功能,应用程序可以通过状态栏报告当前活动的进度。例如,使用Windows资源管理器复制文件时,进度条位于任务栏中应用程序图标的顶部,并在更新时显示进度。

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-07-18 02:56:53

MSDN杂志上有一篇关于the new taskbar APIs的好文章。是的,这个功能非常棒:-)

从本质上讲,这一切都与实现IFileOperation有关。有一篇关于在托管代码here中使用它的好文章。

票数 12
EN

Stack Overflow用户

发布于 2009-09-07 12:46:34

.NET 4以下版本的,或任何.NET版本中的WinForms

使用微软的Windows API Code Pack (正如基隆提到的),它真的很简单。您只需使用TaskbarManager即可。例如。

要启动进度,请执行以下操作:

代码语言:javascript
复制
TaskbarManager.Instance.SetProgressState(TaskbarProgressBarState.Normal);

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

代码语言:javascript
复制
TaskbarManager.Instance.SetProgressValue(currentValue, maxProgressValue);

当你完成的时候,结束这个过程:

代码语言:javascript
复制
TaskbarManager.Instance.SetProgressState(TaskbarProgressBarState.NoProgress);

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

适用于.NET 4及更高版本的,带WPF

您可以使用System.Windows.Shell.TaskbarItemInfo。例如,在主窗口的Xaml中,您需要添加:

代码语言:javascript
复制
<Window.TaskbarItemInfo>
    <TaskbarItemInfo x:Name="taskBarItemInfo" />
</Window.TaskbarItemInfo>

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

代码语言:javascript
复制
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线程来更新任务栏。

票数 46
EN

Stack Overflow用户

发布于 2009-08-02 03:18:47

如果你计划使用Windows7任务栏的其他功能,另一种方法是使用微软的库: Windows API Code Pack for .NET Framework,该库在old link上不再可用,但可以在nuget上找到。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1146574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档