Exemple #1
0
 /// <summary>
 /// Implementation of asynchronous function called by sub-classes with appropriate function parameters
 /// to perform the asynchronous operation, and turn results into TEventArgs.
 /// This override just defaults the userState object to null.
 /// </summary>
 /// <typeparam name="TData">Input data type of operation.</typeparam>
 /// <typeparam name="TResult">Result data type of operation.</typeparam>
 /// <param name="data">Operation input data.</param>
 /// <param name="operation">Operation being called in another thread by AsyncOperation.</param>
 /// <param name="funcProxy">Function being called.</param>
 /// <param name="funcEvent">Function to create TEventArgs from results.</param>
 public void AsyncFuncImpl <TData, TResult>(TData data
                                            , AsyncOperationFuncDefaultDelegate <TData, TResult> operation
                                            , Func <TData, TResult> funcProxy
                                            , MakeFuncEventDelegate <TData, TResult> funcEvent)
 {
     this.AsyncFuncImpl(null, data, operation, funcProxy, funcEvent);
 }
Exemple #2
0
 /// <summary>
 /// Implementation of asynchronous function called by sub-classes with appropriate function parameters
 /// to perform the asynchronous operation, and turn results into TEventArgs.
 /// This overload requires no operation delegate specified for AsyncOperation.
 /// </summary>
 /// <typeparam name="TData">Input data type of operation.</typeparam>
 /// <typeparam name="TResult">Result data type of operation.</typeparam>
 /// <param name="data">Operation input data.</param>
 /// <param name="funcProxy">Function being called.</param>
 /// <param name="funcEvent">Function to create TEventArgs from results.</param>
 public void AsyncFuncImpl <TData, TResult>(object userState
                                            , TData data
                                            , Func <TData, TResult> funcProxy
                                            , MakeFuncEventDelegate <TData, TResult> funcEvent
                                            )
 {
     this.AsyncFuncImpl(userState, data, AsyncOperationFuncDefaultImpl, funcProxy, funcEvent);
 }
Exemple #3
0
    // Implementation defined in sub-class.

    /// <summary>
    /// Implementation of asynchronous function called by sub-classes with appropriate function parameters
    /// to perform the asynchronous operation, and turn results into TEventArgs.
    /// </summary>
    /// <typeparam name="TData">Input data type of operation.</typeparam>
    /// <typeparam name="TResult">Result data type of operation.</typeparam>
    /// <param name="userState">User state object provided by calling code.</param>
    /// <param name="data">Operation input data.</param>
    /// <param name="operation">Operation being called in another thread by AsyncOperation.</param>
    /// <param name="funcProxy">Function being called.</param>
    /// <param name="funcEvent">Function to create TEventArgs from results.</param>
    public void AsyncFuncImpl <TData, TResult>(object userState
                                               , TData data
                                               , AsyncOperationFuncDefaultDelegate <TData, TResult> operation
                                               , Func <TData, TResult> funcProxy
                                               , MakeFuncEventDelegate <TData, TResult> funcEvent
                                               )
    {
        AsyncOperation asyncOp = this.CreateOperation(userState);
        DataAndFunc <TData, TResult> datafunction = new DataAndFunc <TData, TResult>
        {
            operation = operation,
            data      = data,
            func      = funcProxy,
            funcEvent = funcEvent
        };
        AsyncOperationFuncDelegate <TData, TResult> asyncDelegate = this.AsyncOperationFunc <TData, TResult>;

        asyncDelegate.BeginInvoke(datafunction, asyncOp, null, null);
    }
Exemple #4
0
    public static TEventArgs AsyncOperationFuncDefaultImpl <TData, TResult>(TData data, Func <TData, TResult> func, bool cancelled, object userState,
                                                                            MakeFuncEventDelegate <TData, TResult> funcEvent)
    {
        Exception e      = null;
        TResult   result = default(TResult);

        try
        {
            result = func(data);
        }
        catch (Exception ex)
        {
            e = ex;
        }
        object userStateOriginal = userState;

        if (userState is UserStateHolder)
        {
            // Get the original user-provided object out of the holder.
            userState = ((UserStateHolder)userState).UserState;
        }
        return(funcEvent(data, result, e, cancelled, userState));
    }