在非 UI 线程上调用 AsyncWaitHandle.WaitOne 时出现 NotSupportedExceptio

本文关键字:NotSupportedExceptio WaitOne AsyncWaitHandle UI 线程 调用 在非 | 更新日期: 2023-09-27 18:37:14

我尝试等待HttpWebRequest完成而不编写十几个AsyncCallbacks。为此,我尝试在任务中处理调用并在其中使用 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);
            }

此致敬意

克里斯托夫

在非 UI 线程上调用 AsyncWaitHandle.WaitOne 时出现 NotSupportedExceptio

我找到了这篇文章。这为我指明了一个方向,也许这不是常见的银光问题,而是 System.Net.Browser.OHWRAsyncResult 的 IAsyncResult 的实际实现问题。这只会在访问 AsyncWaitHandle getter 时在任何情况下抛出 NotSupportedException。

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

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

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

问候

克里斯托夫

使用此处理程序...

  while ((GetRequestStreamResult.AsyncWaitHandle.WaitOne(1000, true) == false)
          && (GetRequestStreamResult.IsCompleted == false))
           {
               // Do nothing 
           }
相关文章:
  • 没有找到相关文章