Every .NET WinForms project I've written, since .NET 2.0, has included some form of this code:
It's a simple extension method that allows any UI control to update itself when called from an asynchronous method - whether it's running from a .BeginInvoke() call, a BackgroundWorker, a ThreadPool thread, or any other form of asynchronous call. It's simple and effective in managing UI updates from asynchronous methods.
The best part is that it's aware of the control type through the use of generics. You don't have to cast from a generic Control type so that you can access the specific methods and properties of your specific control type.
public static class ControlExtensions
{
public static void Do<TControl>(this TControl control, Action<TControl> action)
where TControl: Control
{
if (control.InvokeRequired)
control.Invoke(action, control);
else
action(control);
}
}
It's a simple extension method that allows any UI control to update itself when called from an asynchronous method - whether it's running from a .BeginInvoke() call, a BackgroundWorker, a ThreadPool thread, or any other form of asynchronous call. It's simple and effective in managing UI updates from asynchronous methods.
I'm currently using it to update a progress bar, like this:
private void SetProgress(int percentage)
{
updateProgressBar.Do(ctl =>
{
ctl.Value = percentage;
});
}
The best part is that it's aware of the control type through the use of generics. You don't have to cast from a generic Control type so that you can access the specific methods and properties of your specific control type.
Read more: LosTechies