using System;
using System.Windows.Forms;
using System.Threading;
namespace Implab.Fx
{
public static class PromiseHelpers
{
///
/// Перенаправляет обработку обещания в поток указанного элемента управления.
///
/// Тип результата обещания
/// Исходное обещание
/// Элемент управления
/// Новое обещание, обработчики которого будут выполнены в потоке элемента управления.
/// Параметр не может быть null.
///
/// client
/// .Get("description.txt") // returns a promise
/// .DispatchToControl(m_ctl) // handle the promise in the thread of the control
/// .Then(
/// description => m_ctl.Text = description // now it's safe
/// )
///
public static IPromise DispatchToControl(this IPromise that, Control ctl)
{
Safe.ArgumentNotNull(that, "that");
Safe.ArgumentNotNull(ctl, "ctl");
var directed = new ControlBoundPromise(ctl);
directed.On(that.Cancel, PromiseEventType.Cancelled);
that.On(
directed.Resolve,
directed.Reject,
directed.Cancel
);
return directed;
}
}
}