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;
5条答案
按热度按时间smtd7mpg1#
适用于.NET 4以下版本或任何.NET版本中的WinForms
使用微软的Windows API Code Pack(正如Keeron提到的),这真的很简单。你只需要使用
TaskbarManager
。要启动进程:
要更新进度:
当你完成的时候,结束这个过程:
你还可以做更多的事情,但这应该让你开始,可能是你所需要的。
适用于带WPF的.NET 4及更高版本
您可以使用System.Windows.Shell.TaskbarItemInfo。例如,在主窗口的Xaml中,您需要添加:
然后,要更新进度,您可以执行以下操作:
不要忘记,如果你正在后台线程上做“工作”(这对长时间运行的任务来说可能是个好主意),你将需要切换回UI线程来更新任务栏。
5hcedyr02#
MSDN杂志上有一篇关于the new taskbar APIs的好文章。是的,这个特性很棒:-)
从本质上讲,这都是关于实现
IFileOperation
的,有一篇很好的文章是关于在托管代码here中使用它的。zsbz8rwp3#
如果您计划使用其他Windows 7任务栏功能,另一种方法是使用Microsoft提供的库:用于.NET Framework的Windows API代码包不再在old link上提供,但可以在nuget上找到。
uqdfh47h4#
我写过一篇关于用C#实现Windows 7任务栏进度API的文章(请参见:该控件是开源的(BSD),并且具有针对C#和VB.NET的示例项目。
这样你就不必从头开始转换C++代码了。
8yoxcaq75#
实际上我使用Telerik的RadWindow,你不能只使用
<telerik:RadWindow.TaskbarItemInfo>
。所以我使用这个net6.0-windows WPF的解决方案:在代码隐藏文件中,我创建了一个属性:
在
BackgroundWorker
的方法部分中我设置进度的值:
在
我重新设置状态: