【发布时间】:2018-11-15 22:08:59
【问题描述】:
我在 BackgroundWorker 中有一个 WebClient,但由于某种原因,当我在启动它之前创建对象时它没有开始下载。 在主线程上运行良好。
这样不行:
Dim AddRPB As New ProgressBar
Dim client As New WebClient
AddHandler client.DownloadProgressChanged, AddressOf DownloadingProgress
AddHandler client.DownloadDataCompleted, AddressOf DownloadComplete
client.DownloadDataAsync(New Uri(WebLink), Data)
这样就可以了:
Dim client As New WebClient
AddHandler client.DownloadProgressChanged, AddressOf DownloadingProgress
AddHandler client.DownloadDataCompleted, AddressOf DownloadComplete
client.DownloadDataAsync(New Uri(WebLink), Data)
Dim AddRPB As New ProgressBar
Dim AddRPB As New ProgressBar
单行以某种方式中断了它,我不明白为什么。
【问题讨论】:
-
如果你打电话给
DownloadDataAsync,使用BackgroundWorker是没有意义的。BackgroundWorker的重点是在辅助线程上工作。DownloadDataAsync的重点是在辅助线程上下载数据。如果您要在辅助线程上下载数据,BackgroundWorker有什么意义? -
根据您发布的代码很难说,但问题很可能与您在使用时在辅助线程上创建
ProgressBar的事实有关BackgroundWorker。这只是没有意义,因为控件是 UI 的一部分,因此本质上是前台。我建议你摆脱BackgroundWorker。如果您还有其他需要,请在 UI 线程上调用DownloadDataAsync。 -
下载只是其中的一部分,请保持话题,为什么之前创建的时候不起作用,但创建后的时候起作用,这是个问题。
-
他是话题。 jmcilhinney 的最后一条评论准确描述了您可能会遇到这种行为的原因:您正在后台线程中创建
ProgressBar(这是一个 UI 元素)。这样做很糟糕,并且抛出异常的那条线可能是它停止工作的一个可能原因。始终确保将 所有 UI 相关工作留在 UI 线程 only。 -
@VisualVincent 没有异常或错误,Sub 正常完成,除了在它之前创建对象时下载没有开始,在它之后创建它时一切都按预期工作,怎么办你解释一下?