4
|
1 using System;
|
|
2 using System.Windows.Forms;
|
|
3 using System.Threading;
|
|
4
|
|
5 namespace Implab.Fx
|
|
6 {
|
|
7 public static class PromiseHelpers
|
|
8 {
|
|
9 /// <summary>
|
|
10 /// Перенаправляет обработку обещания в поток указанного элемента управления.
|
|
11 /// </summary>
|
|
12 /// <typeparam name="T">Тип результата обещания</typeparam>
|
|
13 /// <param name="that">Исходное обещание</param>
|
|
14 /// <param name="ctl">Элемент управления</param>
|
|
15 /// <returns>Новое обещание, обработчики которого будут выполнены в потоке элемента управления.</returns>
|
|
16 /// <exception cref="ArgumentNullException">Параметр не может быть <c>null</c>.</exception>
|
|
17 /// <example>
|
|
18 /// client
|
|
19 /// .Get("description.txt") // returns a promise
|
76
|
20 /// .DispatchToControl(m_ctl) // handle the promise in the thread of the control
|
4
|
21 /// .Then(
|
|
22 /// description => m_ctl.Text = description // now it's safe
|
|
23 /// )
|
|
24 /// </example>
|
76
|
25 public static IPromise<T> DispatchToControl<T>(this IPromise<T> that, Control ctl)
|
4
|
26 {
|
76
|
27 Safe.ArgumentNotNull(that, "that");
|
|
28 Safe.ArgumentNotNull(ctl, "ctl");
|
4
|
29
|
72
|
30 var directed = new ControlBoundPromise<T>(ctl,that,true);
|
4
|
31
|
76
|
32 that.Last(
|
72
|
33 directed.Resolve,
|
76
|
34 directed.Reject,
|
|
35 directed.Cancel
|
4
|
36 );
|
|
37
|
|
38 return directed;
|
|
39 }
|
|
40 }
|
|
41 }
|