我尝试等待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);
}
祝你好运
了Christoph
答案 0 :(得分:2)
我发现了article。这向我指出了可能不是常见的Silverlight问题的方向,而是IAsyncResult的实际实现的问题,该问题是System.Net.Browser.OHWRAsyncResult。在访问AsyncWaitHandle getter时,这会在任何情况下抛出NotSupportedException。
我通过编写这个小的扩展方法来帮助我:
private static void WaitForIt(this IAsyncResult result)
{
while (!result.IsCompleted)
{
Thread.Sleep(50);
}
}
不是很漂亮,但它有效...
此致
了Christoph
答案 1 :(得分:0)
使用此处理程序...
while ((GetRequestStreamResult.AsyncWaitHandle.WaitOne(1000, true) == false)
&& (GetRequestStreamResult.IsCompleted == false))
{
// Do nothing
}