多个BackgroundWorkers可以使用相同的Function / end变量吗?

时间:2014-04-21 09:20:44

标签: vb.net thread-safety backgroundworker

如果让我说我有

,那没关系
BackgroundWoker1
BackgroundWoker2

他们两人都有:

AddHandler BackgroundWoker1.DoWork, AddressOf requestDataTravelPackagesName
AddHandler BackgroundWoker1.ProgressChanged, AddressOf showLoadingAnim

和另一行(时间使用不同)

AddHandler BackgroundWoker2.DoWork, AddressOf requestDataTravelPackagesName
AddHandler BackgroundWoker2.ProgressChanged, AddressOf showLoadingAnim

这是允许的吗?因为我尝试了类似的东西,看来我的表格出现故障。 但它并没有给我任何错误/信息。框架(GUI)刚刚消失。

我想也许这是因为我拥有多名背景工作者。可能他们正在访问相同的变量(在完成的函数中)或类似的函数/等

1 个答案:

答案 0 :(得分:1)

原则上你的建议完全没有问题。如果出现问题,那么您的实施就会出现问题。

DoWork事件处理程序只是一个在辅助线程上执行的方法。在同一时间在多个线程上执行相同的方法是非常常见的,并且没有问题。 ProgressChanged事件处理程序在UI线程上执行,因此您无论如何都不会一次执行多个实例。

与所有多线程场景一样,您始终需要确保同步对公共数据的访问。还必须考虑单线程代码可能出现的所有问题,以及可能的跨线程访问控制以避免。

要了解您的具体案例中存在的问题,我们需要确切了解您的具体情况会发生什么。