view Implab.Fx/PromiseHelpers.cs @ 104:5f10d54b45df v2

renamed Promise.Last -> Promise.On Promise.On doesn't changes Promise.IsExclusive property
author cin
date Sun, 09 Nov 2014 23:03:45 +0300
parents b4c4d65b7def
children 2573b562e328
line wrap: on
line source

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,that);

            that.On(
                directed.Resolve,
                directed.Reject,
                directed.Cancel
            );

            return directed;
        }
    }
}