为什么我在使用BeginInvoke时需要输入两次参数?

时间:2015-06-22 15:32:23

标签: c# delegates begininvoke

我想运行asynchronsly方法,所以我使用委托的BeginInvoke方法。 这个方法有三个参数,问题是我需要输入两次参数,以便我的回调方法可以得到这个输入参数。 这是方法:

delegate.BeginInvoke(ParameterType parameter,AsyncCallback ac, object @object);

以下是代码:

/// <summary>
/// My Parameter Type : which contains the operation result.
/// </summary>
public class OperatoinResult
{
        public string Message { get; set; }

        public bool Flag { get; set; }
}

/// <summary>
/// My Operate method.
/// </summary>
/// <param name="result">Operate Result.</param>
private static void ActionMethod(OperatoinResult result)
{
        //TODO: My Operation.
        result.Message = "action run successfully!";
        result.Flag = true;
}

/// <summary>
/// Callback method.
/// </summary>
/// <param name="oper">The input Operation Result.</param>
private static void ActionCallbackMethod(OperatoinResult oper)
{
         if (oper.Flag)
         {
               Console.WriteLine("Message:"+oper.Message);
         }
}

// My operation code.
var oper = new OperatoinResult {Message = string.Empty, Flag = false};
new Action<OperatoinResult>(ActionMethod).BeginInvoke(
oper,
ar => ActionCallbackMethod((OperatoinResult)ar.AsyncState),
oper);

我们可以看到我为参数参数和@object参数输入oper两次, 如果我将@object设置为null,我的回调方法将获得一个空输入agurment。 我想知道这个@object论点是什么意思。

// if set @obejct = null, the callback method can't get oper parameter.
new Action<OperatoinResult>(ActionMethod).BeginInvoke(
oper,
ar => ActionCallbackMethod((OperatoinResult)ar.AsyncState),
NULL);

我想知道为什么这个BeginInvoke方法有三个参数,但第三个参数没有意义? 并且Dispather.BeginInvoke只有两个参数,所以我想知道这个@object参数的功能是什么?

0 个答案:

没有答案