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