Il tipo di problemi che puoi avere è scontato: l'accesso da più thread rischia di lasciare l'oggetto in una situazione non consistente quando un thread viene bloccato e un altro riprende la sua esecuzione. Le classi che incapsulano i controlli visuali di WinForms non hanno codice di protezione, oltre a dove è espliciticamente indicato il contrario, e pertanto sono soggette a questo problema.Originariamente inviato da albgen
la documentazione di msdn per quella proprietà non spiega niente,
dice che ci spossono essere problemi ma non ti indica il tipo.
La proprietà aiuta a diagnosticare il problema nel caso in cui si abbia il sospetto che uno o più thread accedano ad un controllo con le modalità descritte sopra, causando comportamenti imprevisti, permettendo quindi di diagnosticare il problema.
L'unico e solo dato di fatto è uno: non si accede da più thread ai controlli visuali, non senza i meccanismi di sincronizzazione dell'accesso alle risorse.
Gli accessi ai controlli visuali da più thread sono sempre *non sincronizzati*, poiché semplicemente i controlli sono fatti così.Originariamente inviato da albgen
secondo me intendono che utilizzando quella proprietà ottieni un atteggiamento non prevedibile(unpredictable results) in quanto non hai accessi sincronizzati.
La proprietà aiuta solamente a diagnosticare i problemi che possono nascere, dovuti a questo fatto che, come detto sopra, c'è e permane.
Questo è fuori discussione, ma nel caso in esame abbiamo due thread che accedono alla stessa risorsa, quindi c'è una "race condition", ed è necessario sincronizzare l'accesso.Originariamente inviato da albgen
Se l'applicazione ha un solo thread che lavora su quel controllo(oltre a quello che lo ha creato) non hai problemi, nel senso che tutte le proprietà del controllo e i metodi li utilizzi solo da un thread e quindi non hai problemi di "race condition".
Bastano anche due soli thread, come nel caso in esame, per richiedere la sincronizzazione dell'accesso ad una risorsa.Originariamente inviato da albgen
Ovviamente il discorso cambia se tu hai tanti thread che lavorano su un oggetto, per es leggendo o scrivendo sulle proprietà o chiamano metodi che cambiano lo stato dell'oggetto.
In questo caso bisogna fare una progettazione ad hoc tenendo conto di tutti i casi possibili...