Principale utente con più risposte
[VB 2010] Utilizzo di un BackgroundWorker

Domanda
-
Salve a tutti, mi sento in dovere di ringraziare in anticipo chi risponderà a questo post, in quanto è una domanda che non bisognerebbe fare in un Forum, ma purtroppo non ho trovato niente in rete...
Sono nuovo con il BackgroundWorker (anche se devo dire che mi affascina non poco) ed ecco le perlplessità che mi sono balzate in testa:
1) Usando
Control.CheckForIllegalCrossThreadCalls = False
incorro in quale pericolo? Esiste un altro modo per risolvere il cross-thread? Che differenza c'è se invece scelgo
Me.CheckForIllegalCrossThreadCalls = False
?
2)Come si usa il
CancelAsync()
?
3)Il codice da eseguire in che punto si mette nell'evento DoWork?
4)Come si utilizza il ReportProgress?
Scusate per le domande nabbe, ma vi sarei grado se postaste direttamente il codice.
Grazie mille a chi mi risponderà.
Risposte
-
Ciao -frenci2012-,
You wrote on 22/05/2013 :
Se ho capito bene quello che mi hai appena chiesto (mi sa proprio di no) utilizzo VB 2010 (Applicazione Windows Forms).
http://msdn.microsoft.com/it-it/library/ms171728(v=vs.80).aspx
.m
blog @ //milestone.topics.it- Proposto come risposta Irina Turcu giovedì 23 maggio 2013 15:16
- Contrassegnato come risposta Irina Turcu giovedì 30 maggio 2013 09:30
-
Ciao -frenci2012-,
You wrote on 29/05/2013 :
Scusate se faccio un up thread, ma è passato molto tempo...
http://lmgtfy.com/?q=utilizzare+backgroundworker+vb.net
.m
blog @ //milestone.topics.it- Contrassegnato come risposta System_ venerdì 31 maggio 2013 13:57
Tutte le risposte
-
Ho avuto occasione di usare il controllo di background solo ude volte in vb2005, poi non so' se e' cambiato molto.
Effettivamente le possibilitò di alterazione che hai MENTRE il controllo fà il suo lavoro sono limtiae a meno che disabiliti il blocco crosstread. (con la prima dele due istruzioni che hai scritto).
Dalle informaizoni che ho a riguardo e' una istruzione ritenuta sbagliata in quanto usandola non affronti il problema ma ti limiti ad aggirarlo.
Per afforntarlo dovresti riuscire a concentrare tutte le interazioni con gli altri controli nel'evento di fine lavoro del background worker (o in quello di lavoro interrotto, pero devi abiltiare l'evento di interruzzione nelle propietà del controllo), oppure delegare (una pratica sulla quale non posso aiutarti in quanto non la ho mai usata quindi non mi ci sono mai documentato)
In linea teorica dato che quella riga disabilita tutti i blocchi sulle interazioni tra processi (permettendo a un processo di andare a interagire su un altro) potresti rendere l'applicazione complessivamente meno stabile.
Il mio parere personale è che sia una di quelle cose erroneamente ritenute in programmazione "sbagliate a prescindere", ma che semplicemente vanno usate con maggior cautela e, sopratuttto, solo quando si sà esattamente cosa si sta facendo.
P.S
tutto è riferito al background worker di vb2005, non so' quando sia cambiato rispetto al controllo di vb2010.
- Modificato Giorgio_00 mercoledì 22 maggio 2013 07:18
-
Effettivamente le possibilitò di alterazione che hai MENTRE il controllo fà il suo lavoro sono limtiae a meno che disabiliti il blocco crosstread. (con la prima dele due istruzioni che hai scritto).
cosa da non fare mai.
Dalle informaizoni che ho a riguardo e' una istruzione ritenuta sbagliata in quanto usandola non affronti il problema ma ti limiti ad aggirarlo. Per afforntarlo dovresti riuscire a concentrare tutte le interazioni con gli altri controli nel'evento di fine lavoro del background worker (o in quello di lavoro interrotto, pero devi abiltiare l'evento di interruzzione nelle propietà del controllo), oppure delegare (una pratica sulla quale non posso aiutarti in quanto non la ho mai usata quindi non mi ci sono mai documentato)
no, il marshaling tra thread è pienamente supportato da ogni tecnologia di presentazione. Quindi è solo questione di capire come fare. Da ogni thread è possibile interagire con la UI a passo di passare il controllo al thread che gestisce la messagge pump, thread che tipicamente è anche il main thread (ma questa cosa è poco rilevante)
In linea teorica dato che quella riga disabilita tutti i blocchi sulle interazioni tra processi potresti rendere l'applicazione meno stabile.
decisamente meno stabile, l'applicazione potrebbe cominciare a schiatarsi in maniera completamente casuale e totalmente non riproducibile.
Il mio parere personale è che sia una di quelle cose erroneamente ritenute in programmazione "sbagliate a prescindere", ma che semplicemente vanno usate con maggior cautela e, sopratuttto, solo quando si sà esattamente cosa si sta facendo.
Questa è una di quelle cose che sono da classificare come "sbagliate a prescindere", punto.
.m
blog @ //milestone.topics.it- Proposto come risposta Irina Turcu giovedì 23 maggio 2013 15:19
-
-
-
-
Ciao -frenci2012-,
You wrote on 22/05/2013 :
Se ho capito bene quello che mi hai appena chiesto (mi sa proprio di no) utilizzo VB 2010 (Applicazione Windows Forms).
http://msdn.microsoft.com/it-it/library/ms171728(v=vs.80).aspx
.m
blog @ //milestone.topics.it- Proposto come risposta Irina Turcu giovedì 23 maggio 2013 15:16
- Contrassegnato come risposta Irina Turcu giovedì 30 maggio 2013 09:30
-
Non voglio mettermi qua a discutere su cosa non va "mai" usato o meno.
Se voi disabiltiare il controllo cross-tread per un determinato form puoi farlo con quella istruzione, ricordati di ridurne l'uso solo ai punti dove ti serve e poi riabilitalo.
Se i casi in cui dovrai ricorrerci sono molto lmitai vedrai che probabilmente non avrai alcun problema (poi non so' a cosa stai lavorando e anche se me lo descrivi qui non mi basterebbe mai per dirti "vai tranquillo" o meno).Il controllo ha anche un evento che scatta quando ha finito di fare quello che stava facendo (RunWorkerCompleted) e in quell'evento hai di nuovo accesso a tutto senza problemi. Se riesci a concetrare in quell'evento le interazioni che devi fare allora è melgio.
Se invece non ci riesci a vedi che disabitliare il controllo cross.tread ti porta effettivamente meno stabilità la soluzione migliore è delegare.Delegare significa creare un controllo intermediario tra il controllo dove ti trovi e quello che vuoi modificare, in modo che questo"intermediario" lanci gli eventi che ti servono. E' una pratica utile nei casi in cui, come questo, non puoi farlo direttamente.
Non posso spiegarti in dettaglio come si fà in quanto io stesso lo ho fatto solo una volta e non era nemeno un caso molto complicato pero puoi trovare una introduzione (in inglese) quihttp://msdn.microsoft.com/en-us/library/ms172879.aspx
-
-
-
Ciao -frenci2012-,
Fare tali "up thread" non è proprio corretto in confronto agli altri utenti del forum. Invece di adottare questa maniera, ti suggerisco di pensare piuttosto se hai seguito correttamente le indicazioni del Manifesto del forum e della guida Come porre una domanda (linkata sempre nel manifesto) all'apertura del thread. Ad esempio, se chiedi troppe domande in un solo thread, non è detto che riceverai risposta per ciascuno dei topic chiesti. La discussione può diventare poi poco leggibile. Per questo, incoraggiamo tutti di postare una sola domanda per thread.
Inoltre, c'è sempre da tenere in considerazione quanto scritto sotto (citando dal manifesto):
Supporto e Comunità
Il forum è frequentato ed alimentato da persone che quotidianamente spendono tempo e risorse a dare delle risposte agli utenti su diversi prodotti e tecnologie Microsoft. Non deve venir in alcun modo considerato come un supporto 24 ore su 24. Possono passare giorni prima di ricevere una risposta poiché alcune di esse potrebbero aver bisogno di maggiori ricerche. Inoltre, come detto, non tutti i frequentatori della community (inclusi i Microsoft MVP) possono essere sempre a disposizione degli utenti. Il forum è un luogo di discussione e deve essere trattato come tale.
Certa della tua collaborazione,
Irina Turcu - Microsoft
[Manifesto] Regole e Aspetti generali all'uso dei forum MSDN
Questo contenuto è distribuito “as is” e non implica alcuna responsabilità da parte di Microsoft. L'azienda offre questo servizio gratuitamente, allo scopo di aiutare gli utenti e approfondire la loro conoscenza dei prodotti e tecnologie Microsoft.
-
-
Capisco. Se un mio thread scenderà troppo in basso, vedrò di aprirne uno nuovo.
Tanto che non ci siano duplicati sul forum.. :)Irina Turcu - Microsoft
[Manifesto] Regole e Aspetti generali all'uso dei forum MSDN
Questo contenuto è distribuito “as is” e non implica alcuna responsabilità da parte di Microsoft. L'azienda offre questo servizio gratuitamente, allo scopo di aiutare gli utenti e approfondire la loro conoscenza dei prodotti e tecnologie Microsoft.
-
Ciao -frenci2012-,
You wrote on 29/05/2013 :
Scusate se faccio un up thread, ma è passato molto tempo...
http://lmgtfy.com/?q=utilizzare+backgroundworker+vb.net
.m
blog @ //milestone.topics.it- Contrassegnato come risposta System_ venerdì 31 maggio 2013 13:57
-