为 Windows Phone 7 的 WebRequest 增加同步方法

openkk 13年前
     <p>我真的很喜欢开发 Windows Phone 7 程序。像 Visual Studio 和 Blend 都是优良的工具,而 Silverlight 和 XNA 是很好的框架。只能有一个很大的烦恼,就是 WebRequest 不支持同步的方法调用。虽然我知道不应该在 UI 线程上做业务处理,但我不喜欢微软限定的这么死,作为一名开发人员,我宁愿自己作出这一选择。</p>    <p>我已经创建了2个简单的扩展方法添加到WebRequest的同步行为:</p>    <pre class="brush:c#; toolbar: true; auto-links: false;">public static class WebRequestExtensions {  public static WebResponse GetResponse(this WebRequest request)  {   AutoResetEvent autoResetEvent = new AutoResetEvent(false);    IAsyncResult asyncResult = request.BeginGetResponse(r => autoResetEvent.Set(), null);    // Wait until the call is finished   autoResetEvent.WaitOne();    return request.EndGetResponse(asyncResult);  }   public static Stream GetRequestStream(this WebRequest request)  {   AutoResetEvent autoResetEvent = new AutoResetEvent(false);    IAsyncResult asyncResult = request.BeginGetRequestStream(r => autoResetEvent.Set(), null);    // Wait until the call is finished   autoResetEvent.WaitOne();    return request.EndGetRequestStream(asyncResult);  } }</pre>    <p></p>    <p>请注意:使用 AutoResetEvent 会导致一些性能方面的损耗,因此上述代码运行起来其一个真正的同步方法实现要低效。</p>    <p>注意2:我知道你可以从一个 IAsyncResult 对象获取一个 WaitHandle,但这在 WP7 上是不可能的。</p>