Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - cross-thread exception & delegati
Forum - C# / VB.NET - cross-thread exception & delegati

Avatar
Dice (Normal User)
Expert


Messaggi: 238
Iscritto: 26/11/2011

Segnala al moderatore
Postato alle 18:02
Mercoledì, 12/11/2014
Dal titolo si dovrebbe gia capire il problema, ma per evenienza lo spiego in dettaglio ;)

Nella mia windows form, con un pulsante faccio partire un thread; in questo thread faccio questo:

string pippo = this.txtValore.Text + this.cmbGruppi.Text

e mi da l'errore: cross-thread exception.
Allora cercando in internet ho capito qual è il problema (accedo ai controlli della windows form da un thread diverso da quello che li ha creati); ed ho anche letto che tutti usano i delegati per risolvere; solo che su internet ho trovato solo casi in cui volevano modificare, invece io non modifico niente, io voglio LEGGERE i valori.

Ho provato a fare questo:

private delegate string getTextDelegate(Control control);

string pippo = GetText(this.txtValore) + GetText(this.cmbGruppi)

        //funzione che leggi i dati
        private string GetText(Control control)
        {
            if (control.InvokeRequired)
            {
                control.Invoke(new getTextDelegate(GetText));
                return control.Text;
            }
            return control.Text;
        }

Solo che non capisco perchè mi da questo errore:
Eccezione di tipo 'System.Reflection.TargetParameterCountException' in System.Windows.Forms.dll non gestita nel codice utente

Ulteriori informazioni: Mancata corrispondenza nel numero dei parametri.

Mi potete aiutare a risolvere? Dove sbaglio?


La vita è un biscotto ma se piove si scioglie !!!
PM Quote
Avatar
Dice (Normal User)
Expert


Messaggi: 238
Iscritto: 26/11/2011

Segnala al moderatore
Postato alle 18:46
Mercoledì, 12/11/2014
Ok, alla fine ho risolto; ho trovato su internet che facevano in questo modo:

//funzione che leggi i dati
        private string GetText(Control control)
        {
            if (control.InvokeRequired)
            {
                string res = "";
   ->->      var action = new Action<Control>(c => res = c.Text);
                control.Invoke(action, control);
                return res;
            }
            string valore = control.Text;
            return valore;
        }
Però non so cosa significa la riga evidenziata :(

cos è un action? cosa vuol dire "=>"  ?
Please mi potete spiegare meglio il funzionamento di tutto cio?
E magare se ci sono anche altri metodi per fare la stessa cosa, ad esempio senza usare i delegati, me lo potete dire per favore?
Un super grazie in anticipo :)


La vita è un biscotto ma se piove si scioglie !!!
PM Quote