I built a Testbox to learn something about threading in windows form applications. Silverlight and Java are providing the Dispatcher, which really helps when updating GUI El
For simple delegates like this you can use the Action<T>
delegate (link to msdn) from the framework.
public void UpdateTestBox(string newText)
{
if (InvokeRequired)
{
BeginInvoke(new Action<string>(UpdateTestBox), new object[] { newText });
return;
}
tb_output.Text = newText;
}
That way you do not need to maintain your own delegate declarations.
In many cases like this, the simplest approach is to use a "captured variable" to pass state between the threads; this means you can keep the logic localised:
public void UpdateTestBox(string newText)
{
BeginInvoke((MethodInvoker) delegate {
tb_output.Text = newText;
});
}
The above is particularly useful if we expect it to be called on the worker thread (so little point checking InvokeRequired
) - note that this is safe from either the UI or worker thread, and allows us to pass as much or as little state between the threads.