I try to understand why a BeginInvoke method won't accept an anonymous method.
void bgWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
if (InvokeRequired)
{
//Won't compile
BeginInvoke(delegate(object sender, ProgressChangedEventArgs e)
{ bgWorker_ProgressChanged(sender, e); });
}
progressBar1.Increment(e.ProgressPercentage);
}
It tells me 'cannot convert from 'anonymous method' to 'System.Delegate' while when I cast the anonymous method to a delegate it does work ?
BeginInvoke((progressDelegate)delegate { bgWorker_ProgressChanged(sender, e); });
You need to tell the compiler what type of delegate to create, since Invoke
(etc) just take Delegate
(rather than something more specific).
To apply to the largest audience, MethodInvoker
is a handy delegate type
BeginInvoke((MethodInvoker) delegate(...) {...});
However... BackgroundWorker.ProgressChanged
fires on the UI thread automatically - so you don't even need this.