Skip to content

Instantly share code, notes, and snippets.

@karno
Created April 18, 2010 06:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save karno/370044 to your computer and use it in GitHub Desktop.
Save karno/370044 to your computer and use it in GitHub Desktop.
using System;
using System.Windows.Forms;
namespace Std
{
public static class Threading
{
/// <summary>
/// Invoking method with thread safe.
/// </summary>
/// <param name="ctrl">Control</param>
/// <param name="delg">Delegate</param>
/// <param name="args">Arguments</param>
/// <returns>object</returns>
public static object SafeOperate(this Control ctrl, Delegate delg, params object[] args)
{
if (ctrl == null || delg == null || ctrl.IsDisposed || !ctrl.IsHandleCreated)
return null;
try
{
if (ctrl.InvokeRequired)
return ctrl.Invoke(delg, args);
else
return delg.DynamicInvoke(args);
}
catch (InvalidOperationException) { return null; }
}
/// <summary>
/// Invoking method thread safely.
/// </summary>
/// <param name="ctrl">Control</param>
/// <param name="delg">Action delegate</param>
/// <returns>object</returns>
public static object SafeOperate(this Control ctrl, Action delg)
{
return SafeOperate(ctrl, delg, null);
}
/// <summary>
/// Invoking method thread safely.
/// </summary>
/// <param name="ctrl">Form</param>
/// <param name="delg">Action&lt;T&gt; delegate</param>
/// <param name="args">Arguments</param>
/// <returns>object</returns>
public static object SafeOperate<T>(this Control ctrl, Action<T> delg, T args)
{
if (ctrl == null || delg == null || ctrl.IsDisposed || !ctrl.IsHandleCreated)
return null;
if (ctrl.IsDisposed || !ctrl.IsHandleCreated)
return null;
if (ctrl.InvokeRequired)
return ctrl.Invoke(delg, args);
else
return delg.DynamicInvoke(args);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment