在非 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);
}
此致敬意
克里斯托夫
我找到了这篇文章。这为我指明了一个方向,也许这不是常见的银光问题,而是 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
}