c# - progressbar - IProgress<T> en.NET 4.0
progressbar c# ejemplo (1)
En realidad, hay dos partes en IProgress<T>
: la propia interfaz y la implementación provista, Progress<T>
. Técnicamente, la interfaz ni siquiera requiere soporte cruzado, aunque por supuesto así es como se usa en la práctica.
La interfaz, puede copiar textualmente de la documentación de .NET 4.5. Es solo una declaración. Pero para que sea útil, querrá implementarlo también. Para eso, necesitará usar SynchronizationContext
para manejar la invocación de hilos cruzados del evento ProgressChanged
o el manejador provisto al constructor Progress<T>
. Puede escribirlo todo usted mismo, pero en mi humilde opinión es razonable simplemente copiar / pegar desde el código fuente de .NET: http://referencesource.microsoft.com/#mscorlib/system/progress.cs,d23df0450d3fd0d6
Es una clase relativamente simple, y no sería difícil volver a implementarla, pero no debería haber nada sobre la implementación real de .NET que requiera otras características 4.5, así que copiar / pegar desde la fuente debería funcionar bien.
Dicho esto, tenga en cuenta que, de hecho, la funcionalidad equivalente está disponible en versiones anteriores de .NET, en forma de la clase BackgroundWorker
. Esto combina tanto la ejecución asincrónica que se usa normalmente junto con IProgress<T>
con el evento ProgressChanged
que permite que la operación asíncrona informe el progreso. Como solo hay una versión de .NET anterior a 4.5 que también incluye el soporte de TPL que normalmente se usa con IProgress<T>
, utilizar BackgroundWorker
probablemente tenga más sentido en el contexto del código anterior a 4.5.
¿Existe algún equivalente anterior de .NET 4.0 de la interfaz o clase de IProgress (que solo está disponible desde .NET 4.5) que se puede usar para enviar el progreso de la tarea a la IU?
¿O debería escribir mi propia clase / interfaz para eso?