##// END OF EJS Templates
added the blocking queue
added the blocking queue

File last commit:

r119:2573b562e328 v2
r137:238e15580926 v2
Show More
PromiseHelpers.cs
43 lines | 1.7 KiB | text/x-csharp | CSharpLexer
using System;
using System.Windows.Forms;
using System.Threading;
namespace Implab.Fx
{
public static class PromiseHelpers
{
/// <summary>
/// Перенаправляет обработку обещания в поток указанного элемента управления.
/// </summary>
/// <typeparam name="T">Тип результата обещания</typeparam>
/// <param name="that">Исходное обещание</param>
/// <param name="ctl">Элемент управления</param>
/// <returns>Новое обещание, обработчики которого будут выполнены в потоке элемента управления.</returns>
/// <exception cref="ArgumentNullException">Параметр не может быть <c>null</c>.</exception>
/// <example>
/// 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
/// )
/// </example>
public static IPromise<T> DispatchToControl<T>(this IPromise<T> that, Control ctl)
{
Safe.ArgumentNotNull(that, "that");
Safe.ArgumentNotNull(ctl, "ctl");
var directed = new ControlBoundPromise<T>(ctl);
directed.On(that.Cancel, PromiseEventType.Cancelled);
that.On(
directed.Resolve,
directed.Reject,
directed.Cancel
);
return directed;
}
}
}