¿Cómo implemento una barra de progreso y un trabajador de fondo para las llamadas a la base de datos en C#?¿Cómo implemento una barra de progreso en C#?
Tengo algunos métodos que se ocupan de grandes cantidades de datos. Son operaciones de ejecución relativamente larga, por lo que quiero implementar una barra de progreso para que el usuario sepa que algo realmente está sucediendo.
I pensado en utilizar barra de progreso o etiqueta de la tira de estado, pero puesto que hay un solo hilo de interfaz de usuario, el hilo donde se ejecutan los métodos de base de datos de negociación, los controles de interfaz de usuario no se actualizan, haciendo que la barra de progreso o etiqueta de la tira de estado se inútil para mí
ya he visto algunos ejemplos, pero los que tratan de-bucles, por ejemplo:
for(int i = 0; i < count; i++)
{
System.Threading.Thread.Sleep(70);
// ... do analysis ...
bgWorker.ReportProgress((100 * i)/count);
}
private void bgWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar.Value = Math.Min(e.ProgressPercentage, 100);
}
estoy buscando mejores ejemplos.
Aquí hay una muy buena regla general: si usted se encuentra escribiendo Thread.Sleep (n), pulse la tecla de retroceso hasta que ya no existe más. Existen usos legítimos para Thread.Sleep, pero generalmente causa más problemas de los que resuelve. – MusiGenesis
¿qué base de datos está utilizando? Según el tipo de acceso a la base de datos, es posible que pueda determinar el progreso. Por ejemplo, si usa un lector de datos, puede ejecutar una consulta de 'recuento' para ver cuánto se devolverá, luego use eso para determinar el% completado a medida que lee la respuesta a través del lector de datos. Si utiliza un DataAdapter para llenar una tabla, puede usar un evento en la tabla que notifique cuándo se agrega una fila y usar eso para actualizar el% completado del relleno. – galford13x