Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 重新启动Windows.Web.Http.HttpClient on progress事件的内部取消计时器 使用(var-httpClient=new-httpClient(过滤器)) { 使用(var httpContent=newhttpstringcontent(postBody,unicodeincode.Utf8,content\u类型)) { var source=新的CancellationTokenSource(150000); HttpResponseMessage结果; 尝试 { 结果=等待httpClient.PostAsync(新Uri(url),httpContent).AsTask(source.Token,新进度( 进度=> { Debug.WriteLine(“进度”); })); } 捕获(TaskCanceledException e) { 返回新的ServerRequestResponse(RequestResponseType.Timeout); } 捕获(例外e) { 返回新的ServerRequestResponse(RequestResponseType.Failure); } var buffer=await result.Content.ReadAsBufferAsync(); var byteArray=buffer.ToArray(); var responseString=Encoding.UTF8.GetString(byteArray,0,byteArray.Length); 返回新的ServerRequestResponse(RequestResponseType.Success,responseString); } }_C#_Uwp_Timeout_Httprequest_Cancellationtokensource - Fatal编程技术网

C# 重新启动Windows.Web.Http.HttpClient on progress事件的内部取消计时器 使用(var-httpClient=new-httpClient(过滤器)) { 使用(var httpContent=newhttpstringcontent(postBody,unicodeincode.Utf8,content\u类型)) { var source=新的CancellationTokenSource(150000); HttpResponseMessage结果; 尝试 { 结果=等待httpClient.PostAsync(新Uri(url),httpContent).AsTask(source.Token,新进度( 进度=> { Debug.WriteLine(“进度”); })); } 捕获(TaskCanceledException e) { 返回新的ServerRequestResponse(RequestResponseType.Timeout); } 捕获(例外e) { 返回新的ServerRequestResponse(RequestResponseType.Failure); } var buffer=await result.Content.ReadAsBufferAsync(); var byteArray=buffer.ToArray(); var responseString=Encoding.UTF8.GetString(byteArray,0,byteArray.Length); 返回新的ServerRequestResponse(RequestResponseType.Success,responseString); } }

C# 重新启动Windows.Web.Http.HttpClient on progress事件的内部取消计时器 使用(var-httpClient=new-httpClient(过滤器)) { 使用(var httpContent=newhttpstringcontent(postBody,unicodeincode.Utf8,content\u类型)) { var source=新的CancellationTokenSource(150000); HttpResponseMessage结果; 尝试 { 结果=等待httpClient.PostAsync(新Uri(url),httpContent).AsTask(source.Token,新进度( 进度=> { Debug.WriteLine(“进度”); })); } 捕获(TaskCanceledException e) { 返回新的ServerRequestResponse(RequestResponseType.Timeout); } 捕获(例外e) { 返回新的ServerRequestResponse(RequestResponseType.Failure); } var buffer=await result.Content.ReadAsBufferAsync(); var byteArray=buffer.ToArray(); var responseString=Encoding.UTF8.GetString(byteArray,0,byteArray.Length); 返回新的ServerRequestResponse(RequestResponseType.Success,responseString); } },c#,uwp,timeout,httprequest,cancellationtokensource,C#,Uwp,Timeout,Httprequest,Cancellationtokensource,上面的代码调用到服务器的post,并有一个超时。我需要做的是在收到进度调用后重新启动内部超时计数器。我需要它来检测传输是否仍在进行或已经停止,因为有时在连接速度较慢的情况下,传输时间可能会超过超时时间 是否有这样的功能,或者我需要实现自己的计时器,以便能够手动重新启动它 我需要这个来检测传输是否仍在进行 您无法检测传输是否仍在进行,IAsyncOperationWithProgress接口仅提供Progress事件处理程序。你可以发现进展 您只能从中检测完成的进度 我需要做的是在收到进度调用后重

上面的代码调用到服务器的post,并有一个超时。我需要做的是在收到进度调用后重新启动内部超时计数器。我需要它来检测传输是否仍在进行或已经停止,因为有时在连接速度较慢的情况下,传输时间可能会超过超时时间

是否有这样的功能,或者我需要实现自己的计时器,以便能够手动重新启动它

我需要这个来检测传输是否仍在进行

您无法检测传输是否仍在进行,
IAsyncOperationWithProgress
接口仅提供
Progress
事件处理程序。你可以发现进展

您只能从中检测完成的进度

我需要做的是在收到进度调用后重新启动内部超时计数器

httpclient内的默认值为100000毫秒(100秒)。 如果请求数据的时间超过100秒,则需要手动设置超时

0------SendingHeaders
0------WaitingForResponse
0------ReceivingHeaders
0------ReceivingContent
65536------ReceivingContent
98304------ReceivingContent
98432------ReceivingContent
98432------ReceivingContent

我将此标记为一个答案,因为它包含了大量有用的数据。我用一个用于“超时”的自定义计时器解决了我的问题。每次抛出Progress事件时,我都会重置计时器,因此我能够大致检测到传输的空闲时间。这对我来说已经足够好了。
httpResponse = await httpClient.GetAsync(requestUri).AsTask(source.Token, new Progress<HttpProgress>((Progress) =>
{
    Debug.WriteLine(Progress.BytesReceived.ToString() + "---" + Progress.Stage);
}));
0------SendingHeaders
0------WaitingForResponse
0------ReceivingHeaders
0------ReceivingContent
65536------ReceivingContent
98304------ReceivingContent
98432------ReceivingContent
98432------ReceivingContent
var cts = new CancellationTokenSource();

......

cts.CancelAfter(2000);