我想运行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参数的功能是什么?