una - progress bar c#
¿Cómo puedo codificar una barra de progreso para que Windows 7 también se actualice en la barra de tareas? (4)
Hay un buen artículo en la revista MSDN sobre las nuevas API de la barra de tareas . Y sí, la característica es impresionante :-)
Esencialmente, se trata de implementar IFileOperation
. Hay un buen artículo sobre su uso en código administrado here .
Windows 7 tiene una característica IMPRESIONANTE que las aplicaciones pueden informar sobre el progreso de la actividad actual a través de la barra de estado. Por ejemplo, al copiar archivos con el Explorador de Windows, se coloca una barra de progreso encima del icono de la aplicación en la barra de tareas y el progreso se muestra a medida que se actualiza.
¿Cuál es la API para exponer la barra de progreso? ¿Hay documentación de MSDN al respecto?
He escrito un artículo sobre la implementación de la API de progreso de la barra de tareas de Windows 7 en C # (consulte: Barra de progreso de la barra de tareas de Windows 7 con C # y .NET ). El control es de código abierto (BSD) y tiene proyectos de ejemplo para C # y VB.NET.
De esta manera no tienes que convertir el código C ++ desde cero.
Si planea usar otras características de la barra de tareas de Windows 7, otro método sería usar la biblioteca de Microsoft: el paquete de códigos API de Windows para .NET Framework, que ya no está disponible en el enlace anterior , pero se puede encontrar en nuget .
Por debajo de .NET 4, o WinForms en cualquier versión .NET
Usar el paquete de códigos API de Windows de Microsoft (como mencionó Keeron), es realmente simple. Solo necesitas usar el TaskbarManager
. P.ej
Para iniciar el progreso:
TaskbarManager.Instance.SetProgressState(TaskbarProgressBarState.Normal);
Para actualizar el progreso:
TaskbarManager.Instance.SetProgressValue(currentValue, maxProgressValue);
Y cuando termines, para terminar el progreso:
TaskbarManager.Instance.SetProgressState(TaskbarProgressBarState.NoProgress);
Hay más cosas que puede hacer, pero eso lo ayudará a comenzar y podría ser todo lo que necesita.
Para .NET 4 y superior con WPF
Puede utilizar System.Windows.Shell.TaskbarItemInfo . Por ejemplo, en el Xaml para su ventana principal, deberá agregar:
<Window.TaskbarItemInfo>
<TaskbarItemInfo x:Name="taskBarItemInfo" />
</Window.TaskbarItemInfo>
Luego, para actualizar el progreso, harías algo como:
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;
No olvide que si está haciendo el ''trabajo'' en un subproceso en segundo plano (lo que probablemente sea una buena idea para tareas de ejecución prolongadas), deberá volver al subproceso de la interfaz de usuario para actualizar la barra de tareas.