chi*_*apa 6 vb.net json httpresponse httprequest getjson
我正在使用发送HTTP请求的Sharefile API并获得各自的答案.它们是通过URL制作的,并始终使用相同的功能.这里是.
Private Function InvokeShareFileOperation(ByVal requestUrl As String) As JObject
Dim request As HttpWebRequest = WebRequest.Create(requestUrl)
Dim response As HttpWebResponse = request.GetResponse()
Dim reader As StreamReader = New StreamReader(response.GetResponseStream())
Dim json As String = reader.ReadToEnd()
response.Close()
Return JObject.Parse(json)
End Function
Run Code Online (Sandbox Code Playgroud)
由于某些操作有点长,我需要以某种方式跟踪他们正在进行的进度并且不知道如何进行.后来我打算使用这个进度并从中创建一个进度条.
(编辑)顺便说一句,这是占用大部分时间的第二个代码行(下面),即跟踪操作.
Dim response As HttpWebResponse = request.GetResponse()
Run Code Online (Sandbox Code Playgroud)
编辑:我认为您无法在这里以任何准确的方式衡量进度,因为大部分操作似乎都依赖于处理请求的远程服务器。GetResponse() 处理设置 DNS、连接、发送和等待远程服务器,这一切都在您的手中。如果返回内容长度标头,则仅可测量读取响应流。就我个人而言,我最初将进度显示为 20%,当 GetResponse 返回时为 60%,然后如果您在下载前有内容长度,或者在您完成阅读响应流后一次性完成最后 40% 可以增量显示。
作为网络请求,您可以先找出内容长度,然后使用缓冲区而不是 ReadToEnd() 读取响应流。这允许您在下载响应时计算进度并触发通知。
Dim request As HttpWebRequest = WebRequest.Create(requestUrl)
Using response As HttpWebResponse = request.GetResponse()
Dim contentLength As Long = response.ContentLength
Dim bytesReceived As Long
Dim bufferLength as Integer = 8192
Dim buffer(bufferLength) As Char
Dim sb As New StringBuilder
Using reader As StreamReader = New StreamReader(response.GetResponseStream())
Do
Dim bufferedCount As Integer = reader.Read(buffer, 0, bufferLength)
sb.Append(buffer, 0, bufferedCount)
bytesReceived += bufferedCount
Console.WriteLine(bytesReceived / contentLength * 100 & "%")
Loop While bytesReceived < contentLength
End Using
Return JObject.Parse(sb.ToString)
End Using
Run Code Online (Sandbox Code Playgroud)
显然,您可以使用进度更新函数或调用 SignalR 集线器来替换 Console.WriteLine 以更新网页,并且您可以试验缓冲区大小以查看最适合您的方式。
小智 1
也许一个简单的秒表是一个开始的方法?
Dim timer As System.Diagnostics.Stopwatch = New Stopwatch()
Dim request As HttpWebRequest = WebRequest.Create(requestUrl)
timer.Start()
Dim response As HttpWebResponse = request.GetResponse()
timer.Stop()
Dim reader As StreamReader = New StreamReader(response.GetResponseStream())
Dim json As String = reader.ReadToEnd()
response.Close()
Label1.Text = "Secs:" & timer.Elapsed.ToString()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2143 次 |
| 最近记录: |