我正在编写一个应用程序并且想知道,VB中是否有一个协同例程(或类似的东西)功能?
在我的应用程序中,它会从互联网上提取一张照片,这需要相当长的时间(30-45秒),并且它会阻止所有代码运行。以下是拉动该图片的代码行:
PictureBox1.Image = Image.FromStream(System.Net.HttpWebRequest.Create("http://www.example.com/avimgs/" & Username.Text & ".gif").GetResponse().GetResponseStream())
答案 0 :(得分:5)
您可以使用后台工作程序进程或自己创建一个单独的线程。
答案 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)
您需要在后台线程中下载图像。有关线程的详细信息,请参阅以下文档:
答案 3 :(得分:1)
Coroutines本身并未在.NET中实现。你必须使用一个线程。我在光纤和.NET方面玩了一些,但是在托管环境中使这些工作有一些重大的技术问题。 This thread有一些很好的讨论和链接。