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; } } }