using System.Windows.Forms; using System; namespace Implab.Fx { public class ControlBoundPromise : Promise { readonly Control m_target; public ControlBoundPromise(Control target) { Safe.ArgumentNotNull(target, "target"); m_target = target; } protected override void SignalSuccess(IDeferred handler) { if (m_target.InvokeRequired) m_target.BeginInvoke(new Action>(base.SignalSuccess), handler); else base.SignalSuccess(handler); } protected override void SignalCancelled(IDeferred handler) { if (m_target.InvokeRequired) m_target.BeginInvoke(new Action>(base.SignalCancelled), handler); else base.SignalCancelled(handler); } protected override void SignalError(IDeferred handler, Exception error) { if (m_target.InvokeRequired) m_target.BeginInvoke(new Action,Exception>(base.SignalError), handler, error); else base.SignalError(handler, error); } } }