gpt4 book ai didi

windows-phone-7 - WP7 中的 HttpWebRequest 超时不适用于计时器

转载 作者:行者123 更新时间:2023-12-04 07:05:17 26 4
gpt4 key购买 nike

由于 WP7 HttpWebRequest 不支持超时,我使用计时器来实现该功能。下面是一个例子。我从 UI 表单调​​用 GetConnection()。但是 ReadCallback() 在计时器时间结束之前永远不会执行。一旦计时器停止,就会触发 ReadCallBack()。似乎计时器线程正在阻止 HTTP 响应。任何帮助表示赞赏。我也尝试过 ManualResetEvent,结果也一样。

private HttpWebRequest conn;
private bool _timedOut = false;
private DispatcherTimer tmr;

public void GetConnection()
{
conn = (HttpWebRequest)HttpWebRequest.Create(new Uri("http://www.contoso.com"));
conn.Method = "GET";

tmr = new DispatcherTimer();
tmr.Interval = TimeSpan.FromSeconds(10);
tmr.Tick += new EventHandler(tmr_Tick);
_stopTimer = false;

IAsyncResult resp = conn.BeginGetResponse(new AsyncCallback(ReadCallback), conn);

tmr.Start();
}

private void tmr_Tick(object sender, EventArgs e)
{
if (!_stopTimer)
{
tmr.Stop();
conn.Abort();
}
}

private void ReadCallback(IAsyncResult asynchronousResult)
{
_stopTimer = true;
HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;

m_response = (HttpWebResponse)request.EndGetResponse(asynchronousResult);
}

最佳答案

您的代码符合我的预期。当您对挂起的请求调用 Abort() 时,您的 ReadCallback 应该会触发。然后,当您调用 EndGetResponse() 时,您应该会收到 Status=RequestCanceled 的 WebException。

试试这个稍微修改过的代码,看看它的实际效果:

private void ReadCallback(IAsyncResult asynchronousResult)
{
_stopTimer = true;
HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;

try
{
var m_response = (HttpWebResponse)request.EndGetResponse(asynchronousResult);
System.Diagnostics.Debug.WriteLine("Success");
}
catch (WebException exc)
{
System.Diagnostics.Debug.WriteLine(exc.Status);
}
}

另见 MSDN: http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.abort(v=VS.95).aspx

Abort 方法取消对资源的请求。取消请求后,调用 BeginGetResponse、EndGetResponse、BeginGetRequestStream 或 EndGetRequestStream 方法会导致 WebException,Status 属性设置为 RequestCanceled。

关于windows-phone-7 - WP7 中的 HttpWebRequest 超时不适用于计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5554243/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com