【问题标题】:Windows 8 C# portable library for metro app foreground background lock HttpWebRequest用于 Metro 应用程序前台后台锁定 HttpWebRequest 的 Windows 8 C# 便携式库
【发布时间】:2014-05-28 07:39:53
【问题描述】:

我在 Metro 应用程序的 Windows 8 C# 库上遇到问题。我使用 HttpWebRequest 对象通过 BeginGetRequestStream 方法发送数据和接收服务器响应。但是当我多次进入后台前台时,我从未达到此代码:

HttpWebRequest req = HttpWebRequest.CreateHttp(monUri);
req.BeginGetRequestStream(result =>
{
  /* My Code */
},req);

我找到了这个主题Windows 8.1 App - HttpWebRequest working only once,但我不能使用“await”,因为我在 C# 可移植库中。

此外,我尝试中止所有连接,但是当我开始一个新的连接时,我已经被锁定了。

在网络堆栈跟踪上,它被锁定在:Exiting HttpWebRequest#44973269::BeginGetRequestStream() -> ContextAwareResult#52835420

【问题讨论】:

  • 在我们提供帮助之前,您可能需要发布更多代码。如果您从 lambda 函数更改为可以放置断点的实际委托函数,则调试可能会更容易。还要检查您是否正确使用HttpWebRequest.BeginGetRequestStream:请参阅MSDN

标签: c# windows-8 httpwebrequest portable-class-library


【解决方案1】:

几件事:

  • 我不确定是否是这里的问题,但在 Windows Phone 中出现此类问题的常见原因是试图阻止 UI 线程上的网络结果,这将导致死锁。我不确定这是否发生在 Windows 应用商店应用中,但值得一试。
  • 可移植类库确实支持异步和等待。根据您的目标平台,默认情况下会支持它,但如果不是,您可以通过Microsoft.Bcl.Async NuGet package 获得它。
  • 我建议使用 HttpClient 而不是 HttpWebRequest。这是一个更好的 API,可以很好地与 async/await 配合使用。您可以通过Microsoft.Net.Http NuGet package 在 PCL 中获取它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多