PDA

View Full Version : [c#]Problema con "BeginInvoke"


RaouL_BennetH
02-11-2012, 01:29
posto il codice incriminato:



private void TestDelegate(int id);

public MyForm()
{
InitializeComponent();
System.Timers.Timer timer = new System.Timers.Timer();
timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
timer.Interval = 5000;
timer.Enabled = true;
}

private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
mioControllo.BeginInvoke(new TestDelegate(Foo));
}

private void Foo(int id)
{
dataGrid.DataSource = someSource.Where(id == id);
}


L'errore che ottengo è:


TargetParameterCountException was unhandled
Parameter count mismatch.


Premetto che ho voluto usare un System.Timers.Timer
anzichè un System.Windows.Forms.Timer
perchè non devo bloccare l'interfaccia utente durante il "refresh"


Grazie a tutti !

wingman87
02-11-2012, 06:57
Il delegate che hai passato richiede un parametro, dovresti usare l'overload di BeginInvoke che prende anche un array di parametri:
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.begininvoke.aspx

gugoXX
03-11-2012, 13:25
private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
mioControllo.BeginInvoke( (Action) () => TestDelegate(Foo));
}


Dove TestDelegate e' un metodo che accetta quel Foo.