Windows phone 7 Windows Phone 7中的同步呼叫

Windows phone 7 Windows Phone 7中的同步呼叫,windows-phone-7,httpwebrequest,webclient,ivalueconverter,manualresetevent,Windows Phone 7,Httpwebrequest,Webclient,Ivalueconverter,Manualresetevent,我知道我不能在WindowsPhone7中进行真正的同步通话。但是,我尝试至少阻止线程处理,直到异步调用完成或超时。我尝试了以下方法,但我的应用程序似乎忽略了它,放弃了通话,不再返回。你知道为什么吗 我正在尝试在绑定期间使用值转换器更新值 public ManualResetEvent _event; public void GetSync() { _event = new ManualResetEvent(false); var wc = new WebClient();

我知道我不能在WindowsPhone7中进行真正的同步通话。但是,我尝试至少阻止线程处理,直到异步调用完成或超时。我尝试了以下方法,但我的应用程序似乎忽略了它,放弃了通话,不再返回。你知道为什么吗

我正在尝试在绑定期间使用值转换器更新值

public ManualResetEvent _event;

public void GetSync()
{
    _event = new ManualResetEvent(false);

    var wc = new WebClient();
    wc.OpenReadCompleted += new OpenReadCompletedEventHandler(ReadCompleted);
    wc.OpenReadAsync(new Uri("My URL"));

    // block until async call is complete
    _event.WaitOne(5000);
}

private void ReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
    var serializer = new XmlSerializer(typeof(MyFormatter));
    // The property below is accessed back in the Value Converter for binding
    StronglyTypedObject = (StObject)serializer.Deserialize(e.Result);
    _event.Set();
}

我现在无法测试,但是如果我没记错的话,
WebClient
的回调使用了UI线程,因此如果您阻止它,它就无法工作。要确认这是否是您的问题,请尝试改用
HttpWebRequest
(或在单独的线程中执行
GetSync
)我喜欢没有评论的否决票。严肃地说。:)@库奇兹-谢谢你的评论。我认为所有WP7调用,包括WebClient where async:通常,锁定UI被认为是不好的做法。特别是当你在进行网络通话时:如果网络质量很差(而且经常发生在手机上),请求可能会超时并锁定用户界面很长一段时间(在你的情况下,最长可达5秒,因为你在锁定上设置了超时)。但是如果您真的想这样做,您可以使用
HttpWebRequest
而不是
WebClient
,保持相同的锁定机制,并将UI更新代码放在
\u事件之后。WaitOne
(因为
StronglyTypedObject
是一个属性,您可以访问它)您的意思是,ValueConverter正在下载图片?您不应该这样做,ValueConverter设计用于处理短操作。在要绑定到列表的模型对象中处理下载(公开BitmapSource属性,并在下载结束时使用INotifyPropertyChanged接口进行更新),或者创建一个自定义控件,封装图片控件并添加所有下载/反序列化逻辑。我推荐第一种解决方案:第二种解决方案对于内存管理来说稍微容易一些,但是将业务代码放在控件中是个坏主意。