Torna indietro   Hardware Upgrade Forum > Software > Programmazione

HONOR CHOICE Projector Air Pro: piccolo, portatile e con Netflix
HONOR CHOICE Projector Air Pro: piccolo, portatile e con Netflix
Un proiettore economico, che fa della portabilità e immediatezza i suoi punti di forza. Adatto per una camera da letto o per la casa vacanze, è basato su sistema proprietario Linux ma offre piena compatibilità ufficiale a Netflix
ASUS ProArt GoPro Edition è il notebook compatto per chi crea
ASUS ProArt GoPro Edition è il notebook compatto per chi crea
Un notebook sviluppato in collaborazione con GoPro ma che risponde al meglio alle necessità di tutti coloro che creano contenuti video: robustezza, design, potenza di calcolo e funzionalità si abbinano al meglio tra di loro, pur se a prezzo di un costo elevato per via della tanta memoria onboard
Fable e Sol a confronto: due cartoni animati creati su un PC con RTX 3090
Fable e Sol a confronto: due cartoni animati creati su un PC con RTX 3090
Ho affidato ai due modelli lo stesso mestiere ma non lo stesso identico prompt: trasformare una storia illustrata in un video usando una RTX 3090 e modelli locali. Ne sono usciti due film, due applicazioni e due idee opposte di efficienza. Fucina, progettata con Fable 5, colpisce di più nei primi secondi. Storyboard Studio, costruito con ChatGPT/Codex, regge meglio sulla distanza e vince il confronto complessivo, ma di stretta misura
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 15-06-2010, 18:31   #1
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
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);
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.:

Codice:
worker = new UIAsyncWorker();
worker.RunWorkAsync(MetodoQualsiasi);
e fin qui, tutto mi funziona.

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
}
L'errore che mi da è:

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
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.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 15-06-2010, 20:55   #2
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
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);
}
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 16-06-2010, 12:30   #3
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Quote:
Originariamente inviato da ^TiGeRShArK^ Guarda i messaggi
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);
}
Ciao e innanzitutto grazie per la risposta

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
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 16-06-2010, 12:39   #4
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
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.
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 16-06-2010, 12:44   #5
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Quote:
Originariamente inviato da ^TiGeRShArK^ Guarda i messaggi
devi invocare il BeginInvoke sul controllo che devi aggiornare...
Dal nome non capivo bene qual'e' il controllo, comunque tutti i controlli hanno BeginInvoke.
Quindi dovrebbe essere il mio "gridHelper".

Facendo così:

Codice:
gridHelper.BeginInvoke(SetBindingSource);


private void SetBindingSource()
{
    myBindingSource.DataSource = myDataGetFromSomeWhere;
    gridHelper.BindGridAsync(myBindingSource);
}
ottengo un errore in compilazione:

Codice:
Cannot convert from 'method group' to 'System.Delegate'
Credo giustamente perchè il metodo 'BeginInvoke' chiede come parametro un Delegate.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


HONOR CHOICE Projector Air Pro: piccolo, portatile e con Netflix HONOR CHOICE Projector Air Pro: piccolo, portati...
ASUS ProArt GoPro Edition è il notebook compatto per chi crea ASUS ProArt GoPro Edition è il notebook c...
Fable e Sol a confronto: due cartoni animati creati su un PC con RTX 3090 Fable e Sol a confronto: due cartoni animati cre...
Il tablet rugged leggero e sottile: Lenovo ThinkTab X11 offre resistenza, doppia USB-C e batteria rimovibile Il tablet rugged leggero e sottile: Lenovo Think...
AMD Advancing AI 2026: l'hardware AMD per le elaborazioni IA del futuro, tra GPU, CPU e robot AMD Advancing AI 2026: l'hardware AMD per le ela...
Visa ne lascia a casa 2600: intelligenza...
Batterie sostituibili? Per Logitech, gli...
IBM: l'IA riduce i costi delle violazion...
Logitech G Cloud bocciata dal pubblico, ...
NVIDIA RTX Spark, provato un prototipo c...
Sony e Fujifilm: evacuate le fabbriche d...
Starship: Ship 40 continua a galleggiare...
UMC investe su Singapore e Tainan per ri...
Steam Machine, novità sulle code:...
Anche Foxconn abbandona VMware e sceglie...
Windows 11 migliora l'accessibilit&agrav...
WhatsApp introduce il nuovo widget per i...
Blink Mini da 12,99€ e Pan-Tilt a 19,99€...
Oracle porta le applicazioni agentiche d...
Guizzo di fine mese Amazon: tutte le off...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 16:09.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v