VB中有“coroutine”功能吗?

时间:2010-02-10 17:37:52

标签: .net windows vb.net visual-studio-2008

我正在编写一个应用程序并且想知道,VB中是否有一个协同例程(或类似的东西)功能?

在我的应用程序中,它会从互联网上提取一张照片,这需要相当长的时间(30-45秒),并且它会阻止所有代码运行。以下是拉动该图片的代码行:

PictureBox1.Image = Image.FromStream(System.Net.HttpWebRequest.Create("http://www.example.com/avimgs/" & Username.Text & ".gif").GetResponse().GetResponseStream())

4 个答案:

答案 0 :(得分:5)

您可以使用后台工作程序进程或自己创建一个单独的线程。

MSDN Link

答案 1 :(得分:2)

通用方法是create a background thread自己,就像其他答案一样。

但是许多.NET组件提供了一种内置的解决方案,可以异步执行其工作 - 总是比手动创建线程更容易。 PictureBox has support用于异步加载图像。

以下是MSDN示例中的完整代码,包括错误处理,取消下载和完成通知。这可不容易。

Private Sub loadButton_Click( _
    ByVal sender As System.Object, _
    ByVal e As System.EventArgs) _
    Handles loadButton.Click

    PictureBox1.LoadAsync("http://www.tailspintoys.com/image.jpg")

End Sub

Private Sub cancelLoadButton_Click( _
    ByVal sender As System.Object, _
    ByVal e As System.EventArgs) _
    Handles cancelLoadButton.Click

    PictureBox1.CancelAsync()

End Sub

Private Sub PictureBox1_LoadCompleted( _
    ByVal sender As System.Object, _
    ByVal e As System.ComponentModel.AsyncCompletedEventArgs) _
    Handles PictureBox1.LoadCompleted

    If (e.Error IsNot Nothing) Then
        MessageBox.Show(e.Error.Message, "Load Error")
    ElseIf e.Cancelled Then
        MessageBox.Show("Load cancelled", "Canceled")
    Else
        MessageBox.Show("Load completed", "Completed")
    End If

End Sub

答案 2 :(得分:1)

您需要在后台线程中下载图像。有关线程的详细信息,请参阅以下文档:

http://support.microsoft.com/kb/315577

答案 3 :(得分:1)

Coroutines本身并未在.NET中实现。你必须使用一个线程。我在光纤和.NET方面玩了一些,但是在托管环境中使这些工作有一些重大的技术问题。 This thread有一些很好的讨论和链接。