我从我的应用程序调用的Web服务有两种方法.
XmlNode getCase(string parameter) // synchronous void getCaseAsync(string parameter) //async我可以简单地调用方法1并将结果存储在像这样的xmlnode中,
XmlNode node=webservice.getCase("test");
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚如何从async方法返回void返回结果.我尝试了这个,但得到了一个erorr:
IAsyncResult result = webservice.getCaseAsync(("test");
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
是的Brian你是对的有一个"已完成"的事件,我已经在我的Form consturcor类中实现了这样的事情,
webService.getCaseCompleted + = new webService.getCaseCompletedEventHandler(webService_getCaseCompleted);
void webService_getCaseCompleted(object sender,webService.getCaseCompletedEventArgs e){webService.GetCaseAsync("test"); 我的表单上还有一个按钮,我想从那里运行代码.我试过这个,私有void button1_Click(对象发送者,EventArgs e){webService_getCaseCompleted(this,null); 但是我得到错误,"e"是Null.我应该怎么运行这个方法?
谢谢,戴夫
假设您正在讨论WCF代理,它将如下所示:
我的IService看起来像这样:
[ServiceContract]
public interface IService
{
[OperationContract]
void DoSomething();
}
Run Code Online (Sandbox Code Playgroud)
在您的客户端中,您的代码如下所示:
var serviceProxy = new MyService.Service1Client();
serviceProxy.DoSomethingCompleted += DoSomethingComplete;
serviceProxy.DoSomethingAsync();
Run Code Online (Sandbox Code Playgroud)
你的异步回调看起来像这样:
private void DoSomethingComplete(object sender, AsyncCompletedEventArgs e)
{
// Handle the result
}
Run Code Online (Sandbox Code Playgroud)
在已完成的处理程序中,您可以检查服务调用是否成功(e.Cancelled == false和e.Error == null).
记得.异步调用不会立即给出结果.它会在完成时告诉你.
希望这可以帮助?
| 归档时间: |
|
| 查看次数: |
3242 次 |
| 最近记录: |