C# Windows Phone 8-将参数传递给回调函数

C# Windows Phone 8-将参数传递给回调函数,c#,windows-phone-8,C#,Windows Phone 8,我对C#和Windows Phone 8的开发相当陌生,遇到了一个我无法克服的问题 我创建了一个类,该类执行一些HTTP请求,并在最后调用回调函数 我需要向回调函数传递一个参数,但我不知道如何传递 看起来我需要IAsyncResult,但我无法创建它的实例 我正在使用以下命令调用回调函数: CallBack.Invoke(null); 这很有效,但我无法通过辩论 PS:回调是一个异步回调() 编辑-更多代码: 来电者: private void abcRenew_Click(object se

我对C#和Windows Phone 8的开发相当陌生,遇到了一个我无法克服的问题

我创建了一个类,该类执行一些HTTP请求,并在最后调用回调函数

我需要向回调函数传递一个参数,但我不知道如何传递

看起来我需要IAsyncResult,但我无法创建它的实例

我正在使用以下命令调用回调函数:

CallBack.Invoke(null);
这很有效,但我无法通过辩论

PS:
回调
是一个异步回调()

编辑-更多代码:

来电者:

private void abcRenew_Click(object sender, EventArgs e)
{
  api = new abcAPI();
  api.CallBack = new AsyncCallback(abcRenew_Click_callback);
  api.getNewAbc();
}

public void abcRenew_Click_callback(IAsyncResult asynchronousResult)
{
  /* should get some values from api
}
API:


简短回答:改用
BeginInvoke
/
EndInvoke

有一个完整的例子,完全一样的东西,你需要在。注意返回值是如何通过
EndInvoke
传递到回调的。编译器将自动生成
AsyncResult
代码

编辑


看到更多的代码后,我突然意识到您完全错了。将
abcApi.Callback
的类型更改为
Action
并调用它应该非常容易。相应地调整回调函数的参数类型,就可以了。

您可以使用如下匿名方法:

private void abcRenew_Click(object sender, EventArgs e)
{
    var api = new abcAPI();

    Action<IAsyncResult> callback = asynchronousResult =>
    {
        /* Now `api` is in scope */
    };

    api.CallBack = new AsyncCallback(callback);
    api.getNewAbc();
}
private void abcRenew\u单击(对象发送者,事件参数e)
{
var api=新的abcAPI();
操作回调=异步结果=>
{
/*现在“api”已进入范围*/
};
api.CallBack=新的异步回调(回调);
api.getNewAbc();
}

IAsyncResult是一个接口,因此您需要为实现它的某个对象创建一个实例,但这看起来不像是您应该手动调用的对象。然后调用
Invoke
可以吗,或者有更好的方法吗?您需要传递一个只有回调调用方知道的参数值,还是在回调创建时就已经知道的参数值?只有回调调用方知道这个值。谢谢-但我不确定是否可以使用它。-我尝试调用回调函数并为其提供一些信息(如
HttpWebRequest.BeginGetResponse(…)
-这样调用程序将得到回调函数的数据。-或者我错了吗?@mrabe请显示更多的代码。提供回调的一方和调用回调的一方。好的,我添加了更多的代码。-非常感谢您的帮助。-在这样一个(简单的)问题上陷入困境太令人沮丧了问题。-我真的很感谢你的帮助。再次感谢你的帮助:)
private void abcRenew_Click(object sender, EventArgs e)
{
    var api = new abcAPI();

    Action<IAsyncResult> callback = asynchronousResult =>
    {
        /* Now `api` is in scope */
    };

    api.CallBack = new AsyncCallback(callback);
    api.getNewAbc();
}