我处于Silverlight应用程序的中间,我有一个函数需要调用Web服务并使用结果完成函数的其余部分。Silverlight异步设计模式问题
我的问题是,我通常会做一个同步Web服务调用得到的结果,并使用该函数进行。由于Silverlight不支持没有其他自定义类来模拟它的同步Web服务调用,因此我认为最好使用异步流而不是与之对抗。所以我的问题涉及什么是在程序流程中处理异步调用的最佳设计模式。
在下面的示例中,我想根据Web服务调用的返回值使用myFunction TypeId参数。但是我不想调用Web服务,直到调用这个函数。我如何改变我的代码设计以允许异步调用?
string _myPath;
bool myFunction(Guid TypeId)
{
WS_WebService1.WS_WebService1SoapClient proxy = new WS_WebService1.WS_WebService1SoapClient();
proxy.GetPathByTypeIdCompleted += new System.EventHandler<WS_WebService1.GetPathByTypeIdCompleted>(proxy_GetPathByTypeIdCompleted);
proxy.GetPathByTypeIdAsync(TypeId);
// Get return value
if (myPath == "\\Server1")
{
//Use the TypeId parameter in here
}
}
void proxy_GetPathByTypeIdCompleted(object sender, WS_WebService1.GetPathByTypeIdCompletedEventArgs e)
{
string server = e.Result.Server;
myPath = '\\' + server;
}
由于提前, 迈克
这个例子似乎很对我好,是有可能通过Action参数传递多个变量? 例如: CallBack(true,myObject); 谢谢。 – 2010-05-05 19:37:58
当然,我只是更新了上面的示例代码,以包含int和bool作为参数。但是,您可以将其更改为任何您需要的。 – 2010-05-06 10:25:41