Sto provando ad utilizzare l'oggetto .NET BackgroundWorker in un'applicazione sto sviluppando..NET BackgroundWorker oggetto
Tutto il materiale su Internet dice che questo oggetto viene eseguito nello "sfondo" ma da nessuna parte ho potuto verificare che questo thread in background funzioni effettivamente in modalità "bassa priorità". Questa domanda si pone perché in Windows (presumo) attività in background può essere eseguito in un 'normale' o 'al di sotto normale' o in modalità di priorità 'basso'.
Nella mia applicazione, ho cercato di impostare la priorità di me stesso all'interno della funzione DoWork chiamando ...
Thread.CurrentThread.Priority=ThreadPriority.Lowest
...
ma questo sembra non avere alcun effetto. Il Backgroundworker ignora questa chiamata?
Vorrei spiegare alcune di più:
La mia applicazione è un client Internet che raccoglie i dati in tempo reale su temperatura, umidità ecc da una camera e upload ad una pagina web (non è un servizio web) utilizzando
system.net.webclient.UploadValuesAsync(...)
chiama
ho scritto l'applicazione in modo tale che la GUI del client raccoglie i dati dalla camera, loro il tempo-francobolli e poi le mette in coda per l'upload in questo modo
...
Synclock objlock
debug.print("Queueing reading...")
dataQ.Enque(reading)
End Synclock
...
Ritiri dalla coda funzione DoWork del BackgroundWorker e poi arrivi in questo modo ...
..............
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
..... ...........
Quando eseguo il programma trovo che ogni volta che l'UploadValuesAsync è chiamata la stampa fuori arresta la finestra di debug. Ho anche aggiunto delle istruzioni di debug per vedere quante letture sono in coda in qualsiasi momento. E questo compito è veramente eseguito in una bassa priorità, mi aspettavo di vedere l'aumento conteggio di coda rapidamente dati sono acquisiti e poi diminuire solo quando in primo piano è inattivo ei dati non viene acquisito. Ma questo non è il caso. Non appena viene aggiunta una lettura alla coda, viene rimossa dalla coda e caricata. Quindi il conteggio delle code è sempre 1 o 0!
C'è qualcosa che non va nel mio approccio? Non dovrei usare affatto l'oggetto background-worker?
BTW, questo è in un laptop dual-core con Windows XP.
Come mai non posso etichettare TUTTE le risposte come utili? Ognuno di loro ha alcuni suggerimenti utili ...! –
Puoi selezionare solo una risposta, ma puoi votare tutte le risposte che ritieni utili. –