我在MainPage.Xaml.cs中有一个以下代码
ManualResetEvent wait = new ManualResetEvent(false);
Service1Client wcf = new Service1Client();
wcf.DoWorkCompleted += (o, ev) =>
{
int s = (int)ev.Result;
wait.Set();
};
wcf.DoWorkAsync();
wait.WaitOne();
//My other part of code where I'd like the value of `int s`.
....
Run Code Online (Sandbox Code Playgroud)
Service1.svc.cs的代码如下.
public class Service1 : IService1
{
public int DoWork()
{
return 5;
}
}
Run Code Online (Sandbox Code Playgroud)
直到DoWork完成我希望我的代码等待,所以我写了这段代码.虽然在WaitOne指令(Service1.svc.cs)之后DoWork()根本不会被调用.申请将留在那里只是没有做任何事情.我之前在SilverLight 4中的另一台机器上工作过,它按预期工作.现在我正在使用SilverLight 3.
有时我需要在Silverlight中调用WCF服务并阻止UI直到它返回.当然,我可以分三步完成:
但是,我想将DoSomethingSync方法添加到服务客户端类,只需在需要时调用它.
可能吗?有没有人真正实现过这样的方法?
更新: 看起来答案根本不是使用同步调用.将为异步调用寻找一些易于使用的模式.看一下这篇文章(摘自评论)了解更多信息.