识别回调哪个wcf请求是当前事件处理程序

时间:2014-02-21 13:06:34

标签: c# web-services wcf silverlight

说我有这段代码:

for(i=0;i<5;i++)
{
    client c = new client();
    c.fooAsyncCompleted+=h;
    c.fooAsync(i);
}

从wcf服务引用生成客户端类的位置。现在在函数h中,我需要知道当前正在处理哪个c.fooAsync结果调用?有办法吗?

2 个答案:

答案 0 :(得分:2)

如果您使用的是Visual Studio生成的普通WCF代理类,则应该有一个带有UserState参数的方法重载。

c.fooAsync(i, i);

在完成的处理程序中,您可以通过EventArgs检索该参数。

h(object sender, fooAsyncCompletedEventArgs e)
{
    var x = e.UserState;
}  

使用该信息,您将知道回叫所属的呼叫。

答案 1 :(得分:0)

您可以从处理程序的第一个参数object sender

中检索已处理事件的来源

假设您的处理程序看起来像(通常)

void handler(object sender, EventArgs e)

您可以通过简单投射获得client对象

var source = (client)sender;

你究竟如何识别它,取决于你(这取决于类结构......因为它需要被识别,一个独特的&#34; id&#34;属性会这样做。)