Как мне написать индикатор выполнения для Windows 7, чтобы он тоже обновлялся на панели задач? - PullRequest
23 голосов
/ 18 июля 2009

Windows 7 имеет УДИВИТЕЛЬНУЮ новую функцию, благодаря которой приложения могут сообщать о ходе текущего действия через строку состояния. Например, при копировании файла (ов) с помощью проводника Windows, индикатор выполнения располагается над значком приложения на панели задач, а ход выполнения отображается по мере его обновления.

Что такое API для отображения индикатора выполнения? Есть ли на нем документация MSDN?

Ответы [ 4 ]

39 голосов
/ 07 сентября 2009

Для ниже .NET 4 или WinForms в любой версии .NET

Используя Windows API Code Pack от Microsoft (как упоминал Керон), это действительно просто. Вам просто нужно использовать TaskbarManager. Э.Г.

Чтобы начать прогресс:

TaskbarManager.Instance.SetProgressState(TaskbarProgressBarState.Normal);

Чтобы обновить прогресс:

TaskbarManager.Instance.SetProgressValue(currentValue, maxProgressValue);

А когда закончите, закончите прогресс:

TaskbarManager.Instance.SetProgressState(TaskbarProgressBarState.NoProgress);

Есть еще кое-что, что вы можете сделать, но это должно помочь вам начать и, возможно, это все, что вам нужно.

Для .NET 4 и выше с WPF

Вы можете использовать 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;

Не забывайте, что если вы выполняете «работу» в фоновом потоке (что, вероятно, является хорошей идеей для долго выполняющихся задач), вам необходимо переключиться обратно в поток пользовательского интерфейса, чтобы обновить панель задач.

12 голосов
/ 18 июля 2009

В журнале MSDN есть хорошая статья о новых API панели задач . И да, функция потрясающая: -)

По сути, это все о реализации IFileOperation. Есть хорошая статья об использовании этого в управляемом коде здесь .

5 голосов
/ 02 августа 2009

Если вы планируете использовать другие функции панели задач Windows 7, другой подход будет заключаться в использовании библиотеки от Microsoft: Windows API Code Pack для .NET Framework, которая больше не доступна по старой ссылке , но можно найти на nuget .

1 голос
/ 28 июля 2009

Я написал статью о реализации API прогресса панели задач Windows 7 в C # (см .: Панель прогресса панели задач Windows 7 с C # и .NET ). Элемент управления с открытым исходным кодом (BSD) и имеет примеры проектов для C # и VB.NET.

Таким образом, вам не нужно конвертировать код C ++ с нуля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...