Silverlight对wcf的同步调用
我正在尝试同步通话。但silverlight应用程序在调用endList方法时会锁定自身。在一个简单的控制台应用程序,我可以使异步同步。我看不出问题所在Silverlight对wcf的同步调用,wcf,silverlight,Wcf,Silverlight,我正在尝试同步通话。但silverlight应用程序在调用endList方法时会锁定自身。在一个简单的控制台应用程序,我可以使异步同步。我看不出问题所在 var svc = new WcfServiceClient(); var ar = svc.BeginList(null, null); var result = svc.EndList(ar); <-- Silverlight hangs here listBox.ItemsSource = result; var
var svc = new WcfServiceClient();
var ar = svc.BeginList(null, null);
var result = svc.EndList(ar); <-- Silverlight hangs here
listBox.ItemsSource = result;
var svc=new WcfServiceClient();
var ar=svc.BeginList(null,null);
var结果=svc.EndList(ar) Silverlight不支持同步呼叫
是一篇关于同步调用Web服务和解决方法的文章。简短回答:如果您不在Dispatcher线程上,您可以这样做,例如:
System.Threading.ThreadPool.QueueUserWorkItem(state =>
{
IAsyncResult asyncResult = svc.BeginSomething(null, null);
if (!asyncResult.CompletedSynchronously)
{
asyncResult.AsyncWaitHandle.WaitOne();
}
try
{
svc.EndSomething(asyncResult);
}
catch
{
throw;
}
finally
{
asyncResult.AsyncWaitHandle.Close();
}
});
这样做的最大优点是,您可以像过去一样保持域模型层的同步,可以轻松实现延迟加载等
但是在实践中,您只能在设计应用程序时严格遵循MVVM/命令模式时使用它,其中ViewModels和命令处理dispatcher线程和模型线程之间的切换。这是一个很大的基础工作要做,并有一些陷阱,但当它的工作,它的工作非常出色
如果您想使用类似的现成框架,可以在以下位置找到:。该页面也对体系结构进行了很好的解释