RaouL_BennetH
15-06-2010, 18:31
:(
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:
gridHelper = new GridHelper();
this.SomePanel.Controls.Add(gridHelper);
Ora, sempre all'interno del form, utilizzo anche l'altra classe UIAsyncWorker, che mi fornisce un backgroundworker che prende un metodo anonimo per eseguire diverse operazioni, ad es.:
worker = new UIAsyncWorker();
worker.RunWorkAsync(MetodoQualsiasi);
e fin qui, tutto mi funziona.
Il problema lo ho quando devo associare una fonte dati al gridHelper:
try
{
worker = new UIAsyncWorker();
worker.InvokeCallBack = delegate()
{
myBindingSource.DataSource = myDataGetFromSomeWhere;
gridHelper.BindGridAsync(myBindingSource);
};
worker.RunAsync();
}
catch(Exception ex)
{
//bla
}
L'errore che mi da è:
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
il controllo 'datagridview' si trova appunto su 'gridHelper' che viene soltanto aggiunto a runtime al mio Form, quindi, giustamente, mi va in errore.
Come potrei risolvere, considerando che:
Non ho accesso e non posso modificare ne gridHelper ne UIAsyncWork ?!?
grazie mille a tutti :)
RaouL.
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:
gridHelper = new GridHelper();
this.SomePanel.Controls.Add(gridHelper);
Ora, sempre all'interno del form, utilizzo anche l'altra classe UIAsyncWorker, che mi fornisce un backgroundworker che prende un metodo anonimo per eseguire diverse operazioni, ad es.:
worker = new UIAsyncWorker();
worker.RunWorkAsync(MetodoQualsiasi);
e fin qui, tutto mi funziona.
Il problema lo ho quando devo associare una fonte dati al gridHelper:
try
{
worker = new UIAsyncWorker();
worker.InvokeCallBack = delegate()
{
myBindingSource.DataSource = myDataGetFromSomeWhere;
gridHelper.BindGridAsync(myBindingSource);
};
worker.RunAsync();
}
catch(Exception ex)
{
//bla
}
L'errore che mi da è:
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
il controllo 'datagridview' si trova appunto su 'gridHelper' che viene soltanto aggiunto a runtime al mio Form, quindi, giustamente, mi va in errore.
Come potrei risolvere, considerando che:
Non ho accesso e non posso modificare ne gridHelper ne UIAsyncWork ?!?
grazie mille a tutti :)
RaouL.