Estoy tratando de utilizar el objeto .NET Backgroundworker en una aplicación que estoy desarrollando.Prioridad de subproceso del objeto .NET Backgroundworker
Todo el material en Internet dice que este objeto se ejecuta en el "fondo" pero en ninguna parte he podido confirmar que este hilo de fondo efectivamente se ejecuta en un modo de "baja prioridad". Esta pregunta surge porque en Windows (supongo) una tarea en segundo plano puede ejecutarse en un modo de prioridad 'normal' o 'por debajo de lo normal' o 'bajo'.
En mi solicitud, me trataron de establecer la prioridad a mí mismo dentro de la función DoWork llamando ...
Thread.CurrentThread.Priority=ThreadPriority.Lowest
...
pero esto parece tener ningún efecto. ¿El trabajador de fondo ignora esta llamada?
me gustaría explicar un poco más:
Mi aplicación es un cliente de Internet que recoge datos en tiempo real de la temperatura, etc humedad de una cámara y subidos a una página web (no es un servicio web) usando
system.net.webclient.UploadValuesAsync(...)
llama
he escrito la solicitud de tal manera que la GUI del cliente recoge los datos de la cámara, ellos sellos de tiempo y luego los pone en cola para subir al igual que
...
Synclock objlock
debug.print("Queueing reading...")
dataQ.Enque(reading)
End Synclock
...
Retiros de cola de función DoWork del BackgroundWorker y luego lo carga como así ...
..............
Do
if dataQ.count() <> 0 then
Synclock objlock
reading = dataQ.DeQue()
End Synclock
Dim client As New System.Net.WebClient
...put the reading in NameValueCollection and upload to server page
req = new NameValueCollection
...
...
client.UploadValuesAsync(uri, "POST", req)
endif
thread.sleep(1) 'without this line the CPU usage goes upto 100% and seems to slow other tasks!
Loop
..... ...........
Cuando ejecuto el programa me parece que cada vez que se llama a UploadValuesAsync se imprime la ventana de depuración se detiene. También agregué declaraciones de depuración para ver cuántas lecturas hay en la cola en cualquier momento. Si esta tarea se ejecuta realmente con baja prioridad, esperaba ver que el recuento de colas aumenta rápidamente a medida que se adquieren los datos y luego disminuyen solo cuando el primer plano está inactivo y no se están adquiriendo datos. Pero este no es el caso. Tan pronto como se agrega una lectura a la cola, se quita de la cola y se carga. ¡Entonces el recuento de cola siempre es 1 o 0!
¿Hay algo mal en mi enfoque? ¿No debería usar el objeto de fondo de trabajo?
Por cierto, esto es en una computadora portátil de doble núcleo con Windows XP.
¿Cómo es que no puedo etiquetar TODAS las respuestas como útiles? ¡Cada uno de ellos tiene algunas sugerencias útiles ...! –
Solo puede seleccionar una respuesta, pero puede votar todas las respuestas que encuentre útiles. –