|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
[C# 2.0]Operazione cross thread non valida
Buonasera a tutti Cerco di descrivere per bene il problema: Ho una dll che fornisce due classi: 1) GridHelper; 2) UIAsyncWorker; Questa dll è referenziata nel mio progetto (di tipo windows forms). Il GridHelper è uno UserControl che non fa altro che darmi un binding navigator ed una datagridview già formattate sul form, ad esempio: Codice:
gridHelper = new GridHelper(); this.SomePanel.Controls.Add(gridHelper); Codice:
worker = new UIAsyncWorker(); worker.RunWorkAsync(MetodoQualsiasi); Il problema lo ho quando devo associare una fonte dati al gridHelper: Codice:
try
{
worker = new UIAsyncWorker();
worker.InvokeCallBack = delegate()
{
myBindingSource.DataSource = myDataGetFromSomeWhere;
gridHelper.BindGridAsync(myBindingSource);
};
worker.RunAsync();
}
catch(Exception ex)
{
//bla
}
Codice:
Operazione cross-thread non valida: e' stato eseguito l'accesso al controllo datagridview da un thread diverso da quello da cui è stata eseguita la creazione Come potrei risolvere, considerando che: Non ho accesso e non posso modificare ne gridHelper ne UIAsyncWork ?!? grazie mille a tutti RaouL.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
devi usare il BeginInvoke sul controllo per lanciare quelle operazioni sul thread della UI.
Qualcosa del genere verrebbe: Codice:
myBindingSource.BeginInvoke(SetDataSource);
private void SetDataSource()
{
myBindingSource.DataSource = myDataGetFromSomeWhere;
gridHelper.BindGridAsync(myBindingSource);
}
__________________
|
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Quote:
Non so se per mia mancanza o altro, ma il 'bindingsource' non mi presenta un metodo BeginInvoke
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
|
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
devi invocare il BeginInvoke sul controllo che devi aggiornare...
Dal nome non capivo bene qual'e' il controllo, comunque tutti i controlli hanno BeginInvoke.
__________________
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Quote:
Facendo così: Codice:
gridHelper.BeginInvoke(SetBindingSource);
private void SetBindingSource()
{
myBindingSource.DataSource = myDataGetFromSomeWhere;
gridHelper.BindGridAsync(myBindingSource);
}
Codice:
Cannot convert from 'method group' to 'System.Delegate'
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:49.




















