在WP7中的HttpWebRequest超时

5
我正在尝试为我的WP7应用程序实现HttpWebRequest超时,因为用户可能会发出请求,而请求将永远不会返回,留下一个我在屏幕上拥有的进度条。
我看到了这个MSDN页面:msdn page 该页面使用
ThreadPool.RegisterWaitForSingleObject (result.AsyncWaitHandle, new WaitOrTimerCallback(TimeoutCallback), myHttpWebRequest, DefaultTimeout, true);

我能添加这段代码并链接所有变量,但当我将其添加到我的代码中时,当运行到以下代码行时会报“NotSupportedOperation”的错误:NotSupportedOperation
allDone.WaitOne();

如果我将其注释掉,在下一行出现相同的NotSupportedOperation错误,这是由于return _result_object;(函数为private object SendBeginRequest())。
我该如何在WP7中添加超时? 这种方法似乎不起作用。由于UI线程问题,我宁愿不使用WebClient。
1个回答

6

如果您错过了,allDone应该是一个ManualResetEvent,您可以传递毫秒数或时间间隔作为等待继续之前的时间量。例如:

private ManualResetEvent _waitHandle = new ManualResetEvent(false);
private bool _timedOut;

...
    this._timedOut = false;
    this._waitHandle.Reset();
    HttpWebRequest request = HttpWebRequest.CreateHttp("http://cloudstore.blogspot.com");
    request.BeginGetResponse(this.GetResponse_Complete, request);

    bool signalled = this._waitHandle.WaitOne(5);
    if (false == signalled)
    {
        // Handle the timed out scenario.
        this._timedOut = true;
    }

    private void GetResponse_Complete(IAsyncResult result)
    {
        // Process the response if we didn't time out.
        if (false == this._timedOut)
        {
            HttpWebRequest request = (HttpWebRequest)result.AsyncState;
            WebResponse response = request.EndGetResponse(result);

            // Handle response. 
         }
     }

或者你可以使用第三方库,如Hammock,它能够允许你设置超时和重试(等其他功能)。根据你的项目需求,这可能比你需要的还要多 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接