1

我尝试等待 HttpWebRequest 完成而不编写一打 AsyncCallback。为此,我尝试在 Task 中处理调用并在其中使用 WaitOne --> 因此不会阻塞 ui 线程。

现在的问题是每次我调用它时都会出现 NotSupportedException,我不明白为什么。有人可以告诉我更多信息,也许如何解决这个问题?

这里的代码:

    Task.Factory.StartNew((x)=>
            {


            HttpWebRequest request = WebRequest.CreateHttp(baseUri + "/api/" + ControllerName);
            request.Method = "POST";
            request.ContentType = "application/json";
            request.Headers["Session"] = SessionKey;

            IAsyncResult GetRequestStreamResult = request.BeginGetRequestStream(null, null);
            GetRequestStreamResult.AsyncWaitHandle.WaitOne(); //<-- That causes the exception
            using (Stream RequestStream = request.EndGetRequestStream(GetRequestStreamResult))
            {
                DataContractJsonSerializer serializer = new DataContractJsonSerializer(Parameter.GetType());
                serializer.WriteObject(RequestStream, Parameter);
            }

此致

克里斯托夫

4

2 回答 2

2

我找到了这篇文章。这为我指明了方向,也许这不是常见的 silverlight 问题,而是 System.Net.Browser.OHWRAsyncResult 的 IAsyncResult 的实际实现存在问题。在任何情况下,这都会在访问 AsyncWaitHandle getter 时引发 NotSupportedException。

我通过编写这个小扩展方法帮助了我:

    private static void WaitForIt(this IAsyncResult result)
    {
        while (!result.IsCompleted)
        {
            Thread.Sleep(50);
        }
    }

不是很漂亮,但它确实有效......

问候

克里斯托夫

于 2013-10-30T08:17:06.273 回答
0

使用此处理程序...

  while ((GetRequestStreamResult.AsyncWaitHandle.WaitOne(1000, true) == false)
          && (GetRequestStreamResult.IsCompleted == false))
           {
               // Do nothing 
           }
于 2014-02-13T14:10:46.833 回答