PDA

View Full Version : [C#] Errore InvalidCastException


informatico91
18-12-2012, 16:44
ciao a tutti. Con un amico stavamo facendo un piccolo programmino in C# il cui obiettivo è quello di eseguire una funzione dopo un tempo preimpostato. Per far ciò abbiamo fatto uso della classe timer. Vi allego la parte del codice di interesse:



...
private void button2_Click(object sender, EventArgs e)
{
var1= webBrowser.Document.GetElementById("prova").InnerHtml;
System.Timers.Timer timer = new System.Timers.Timer();
timer.Interval = 5000;
timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
timer.Start();
}


private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
var2 = webBrowser.Document.GetElementById("prova").InnerHtml;
}
....


In fase di compilazione non da errore ma durante l'esecuzione compare l'errore InvalidCastException all'ultima istruzione (var2 = webBrowser.Document.GetElementById("prova").InnerHtml;)
Non conosciamo molto il C# però leggendo un pò su internet sembra un problema di gestione dei threads visto che un analoga assegnazione viene eseguita correttamente qualche riga su (l'assegnazione della variabile var1 per intenderci). Abbiamo letto e provato diverse cose ma non siamo riusciti a venirne a capo. Qualcuno ci può dare un suggerimento??

gugoXX
18-12-2012, 16:46
Cos'e' var2?

informatico91
18-12-2012, 16:50
sia var1 che var2 sono stringhe. Entrambe sono dichiarate come variabili di istanza..

Braccop
18-12-2012, 16:53
se e' un problema di threading devi usare un delegate

prima proverei cmq un trucchetto "quick&dirty"...

var2 = "" + webBrowser.Document.GetElementById("prova").InnerHtml;

informatico91
18-12-2012, 17:00
se e' un problema di threading devi usare un delegate

prima proverei cmq un trucchetto "quick&dirty"...

var2 = "" + webBrowser.Document.GetElementById("prova").InnerHtml;

Abbiamo appena provato ma continua a dare lo stesso errore.
Per quanto riguarda il delegate come andrebbe usato??

gugoXX
18-12-2012, 17:05
Cosi'

var2 = (string)Invoke((Func<string>)(() => webBrowser.Document.GetElementById("prova").InnerHtml));

informatico91
18-12-2012, 17:14
Cosi'

var2 = (string)Invoke((Func<string>)(() => webBrowser.Document.GetElementById("prova").InnerHtml));

Funziona funziona finalmente:D ... Grazie mille :)