如何在不冻结客户端的情况下等待获取请求

时间:2014-09-23 16:52:39

标签: vb.net

我有一个简单的按钮,它发送一个get请求来检索我网站上的txt文件。问题是它在检索信息时冻结了应用程序。我怎样才能使应用程序在等待结果时不冻结?

Private Sub cmd_ClickMe_Click(sender As Object, e As EventArgs) Handles cmd_ClickMe.Click
    Dim request As String = String.Format("http://www.*****/database/test.txt")
    Dim webClient As New System.Net.WebClient
    Dim result As String = webClient.DownloadString(request)

    MessageBox.Show(result)
End Sub

我也尝试了以下但是它不起作用(说“webClient.DownloadStringAsync(myUri)”不会产生值:

Private Sub cmd_ClickMe_Click_1(sender As Object, e As EventArgs) Handles cmd_ClickMe.Click
    Dim request As String = String.Format("http://www.****.com/database/test.txt")
    Dim webClient As New System.Net.WebClient
    Dim myUri As Uri = New Uri(request)

    Dim result As String = webClient.DownloadStringAsync(myUri)

    MessageBox.Show(result)
End Sub

1 个答案:

答案 0 :(得分:3)

使用DownloadStringAsync(Uri)代替DownloadString(uri)

DownloadStringAsync方法不会阻止调用线程。

以下是如何使用它的示例:

    Dim wc As New WebClient
    '  Specify that you get alerted 
    '  when the download completes.
    AddHandler wc.DownloadStringCompleted, AddressOf AlertStringDownloaded

    Dim uri As New Uri("http:\\changeMe.com")  'Pass the URL to here. This is just an example
    wc.DownloadStringAsync(uri)

End Sub

Public Shared Sub AlertStringDownloaded(ByVal sender As Object, ByVal e As DownloadStringCompletedEventArgs)

    '  If the string request went as planned and wasn't cancelled:
    If e.Cancelled = False AndAlso e.Error Is Nothing Then

        Dim myString As String = CStr(e.Result)   'Use e.Result to get the String
        MessageBox.Show(myString)
    End If

End Sub