Newsgroup: it.comp.lang.visual-basic
Titolo: vb.net e il maledetto backgroundworker

Salve a tutti,
mi sfuggono alcune cose sul backgroundworker... praticamente, lo sto 
utilizzando solamente per non avere l'effetto di applicazione bloccata 
nell'esecuzione di una procedura piuttosto lunga, e vorrei un solo thread 
alla volta. Per fare cio' utilizzo un timer che all'evento tick mi lancia il 
mio lavoro in background. All'interno del lavoro, utilizzo delle funzioni di 
creazione, e rinominazione directory (nulla di trascendentale, le solite 
System.IO.Directory.CreateDirectory etc)... ho notato pero' in debug, che 
quando eseguo queste istruzioni che sono in delle sub secondarie, è come se 
il thread principale facesse un altro ciclo e quindi mi si incasina tutto il 
mondo... Stessa cosa mi succede con thread.sleep()....
Le funzioni di filesystem hanno per caso dei problemi che voi sappiate con 
il threading? E' possibile ovviare in qualche modo continuando ad utilizzare 
il threading?
 
 
grazie 1000
D. 
 

 threading?
 
assolutamente no, funziona tutto alla perfezione.
 
Che cosa vuol dire che fai "partire" il background worker dentro un 
timer? che tipo di timer?
 
.m
 
-- 
blog @ //
milestone.topics.it
 
 
 

"Mauro Servienti [MVP]" <maurose...@online.nospam> ha scritto nel 
messaggio news:mn.b3d77dbcf...@online.nospam...

Semplificando al massimo, quando in debug arrivato a 
Directory.CreateDirectory(......) lo step successivo mi va a 
Variabile1=FaiQualcosa() ed è come se stesse eseguendo 2 thread in 
contemporanea poichè continua sia ad eseguire dopo il createdirectory sia 
dopo il variabile1=FaiQualcosa
 
 
 
 
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As 
System.EventArgs) Handles Timer1.Tick
    Controlla()
End Sub
 
Private Sub Controlla()
        Timer1.Enabled = False
        CheckNew = New System.ComponentModel.BackgroundWorker
        CheckNew .WorkerReportsProgress = True
        CheckNew .RunWorkerAsync()
End Sub
 
Public Module Mymodule
Public WithEvents CheckNew As System.ComponentModel.BackgroundWorker
 
Public Sub CheckNew _DoWork()
    ...
    For Each uid As Long In uidList
       Variabile1=FaiQualcosa()                                    <---  
Torna qui
       Variabile2=Elabora(Variabile1)
       ....
    Next
End Sub
 
Private sub Elabora(byval myvar as string)
    ...
    Directory.CreateDirectory(......)
   ....
End Sub 
 

 ha scritto nel messaggio 
news:4ef34df0$1...@news.x-privat.org...

Dopo ore di debug, ho notato che in realtà è come se il timer1 non venisse 
disattivato, e dopo un tot di tempo, viene rieseguita la procedura 
Controlla()... L'unico punto dove il timer viene riattivato è al 
completamento del worker, quindi non riesco a capire come mai il timer1 
generi l'evento _Tick da solo prima che il lavoro sia completato...... Vi 
viene in mente qualcosa?
 
Sto diventando pazzo!!!
 
D. 
 

 
 
prova a controllare se il timer ha impostato:
AutoReset = true
 
 
 
-- 
Paolo opg
 
BE AWARE that this post uses a fake reply-to address
to contact me write to:
janickg ( at ) hotmail ( dot ) com
--


 
su timer1 non ce l'ho proprio quella proprietà :( (
vb.net
 express 2010)


>
 
m'hai fatto venire il dubbio di aver ciccato, ma ho controllato ed e'
una proprieta' che uso, anche se si tratta di c# e vs 2005... 
 
in piu' ho controllato in un progetto che non usa componenti di terze
parti, quindi sono abbastanza sicuro che sia una proprieta' standard. 
 
per scrupolo, da msdn:
http://msdn.microsoft.com/it-it/library/system.timers.timer.autoreset.asp
 
x 


 su timer1 non ce l'ho proprio quella proprietà :( (
vb.net
 express 2010)
 
Che tipo di Timer stai usando, ce ne sono 3 diversi nel framework.


 
 
"Mauro Servienti [MVP]"  ha scritto nel messaggio 
news:mn.baa67dbc4...@online.nospam...

---
 
Nei controlli dell'IDE dell'express 2010 mi pare che ci sia solo il 
system.windows.forms.timer... cmq per intenderci è questo: 
http://imageshack.us/photo/my-images/64/immaginehs.png/
 
 
D. 
 

 
http://imageshack.us/photo/my-images/64/immaginehs.png/
 
 
prova a chiamare Stop() invece di Enabled = false
