.Net PictureBox图像显示非常缓慢,但加载速度很快

.Net PictureBox图像显示非常缓慢,但加载速度很快,.net,vb.net,picturebox,.net,Vb.net,Picturebox,我正在使用VB.NET将图像从URL加载到使用LoadAsync的PictureBox控件中。这些通常是非常小的图像-有时是76x76像素。在屏幕上显示它们的延迟是极端的。我最初认为这是由于加载时间,但我在LoadComplete事件中添加了一个日志,发现加载图像需要0.29秒,但显示图像需要额外的21秒(每个秒表) Public Sub ShowImage(ByRef image As PictureBox, imgUrl as String) Log("Starting t

我正在使用VB.NET将图像从URL加载到使用LoadAsync的PictureBox控件中。这些通常是非常小的图像-有时是76x76像素。在屏幕上显示它们的延迟是极端的。我最初认为这是由于加载时间,但我在LoadComplete事件中添加了一个日志,发现加载图像需要0.29秒,但显示图像需要额外的21秒(每个秒表)

Public Sub ShowImage(ByRef image As PictureBox, imgUrl as String)
    Log("Starting to load image")
    AddHandler image.LoadCompleted, ImgFinish(image)
    image.Image = Nothing
    image.CancelAsync()
    image.LoadAsync(imgUrl)
    image.Visible = True

End Sub
Private Function ImgFinish(ByRef image As PictureBox)
    Log("Image loading complete")
    Return Nothing
End Function
以及日志输出:

(17:03:59.930) vb_Utilities.ShowImage[697] - V:Starting to load image
(17:04:00.220) vb_Utilities.ImgFinish[731] - Image loading complete
然后,我用秒表计时21秒——到17:25——在图像出现之前)

我还尝试将image.Refresh()添加到函数ImgFinish中,认为它可能只是没有重新绘制,但这没有帮助


是什么导致了这次延误?我可以检查或尝试什么?

不知道该问题,但您应该更改
ImgFinish
的签名以匹配事件。请参阅:。将处理程序更改为“Addressof ImgFInish”会堆叠处理程序-也就是说,每次调用它都会重新添加事件的处理程序,因此最终会调用100次或更多次ImgFInish。出于一个我不太清楚的原因,以这种方式调用函数只会执行一次“它会重新添加事件的处理程序,因此最终ImgFinish会被调用100次或更多…以这种方式调用函数只执行一次”-解决由某个黑客错误的编码决策导致的问题不是一个好主意。在构造函数或OnLoad方法中只添加一次处理程序。或者,按当前操作添加它,但在
ImgFinish
中删除它。我添加它只是为了记录LoadComplete的时间戳。这不是我的解决方案的一部分,一旦我弄清楚为什么图片在加载21秒后出现,我就会删除它