PromiseHelpers.cs
41 lines
| 1.7 KiB
| text/x-csharp
|
CSharpLexer
/ Implab.Fx / PromiseHelpers.cs
cin
|
r4 | 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 | ||||
cin
|
r76 | /// .DispatchToControl(m_ctl) // handle the promise in the thread of the control | ||
cin
|
r4 | /// .Then( | ||
/// description => m_ctl.Text = description // now it's safe | ||||
/// ) | ||||
/// </example> | ||||
cin
|
r76 | public static IPromise<T> DispatchToControl<T>(this IPromise<T> that, Control ctl) | ||
cin
|
r4 | { | ||
cin
|
r76 | Safe.ArgumentNotNull(that, "that"); | ||
Safe.ArgumentNotNull(ctl, "ctl"); | ||||
cin
|
r4 | |||
cin
|
r72 | var directed = new ControlBoundPromise<T>(ctl,that,true); | ||
cin
|
r4 | |||
cin
|
r76 | that.Last( | ||
cin
|
r72 | directed.Resolve, | ||
cin
|
r76 | directed.Reject, | ||
directed.Cancel | ||||
cin
|
r4 | ); | ||
return directed; | ||||
} | ||||
} | ||||
} | ||||