BackgroundWorker_DoWork导致UI无响应?

时间:2012-04-11 02:21:16

标签: .net multithreading winforms backgroundworker

我正在使用backgroundworker使用tableadapter.fill()填充一堆数据集。由于某种原因,他们导致UI无响应。这怎么可能呢?我没有用它向UI报告任何信息......它只是应该在后台运行,没有进度条。

Me.spOpportunityTableAdapter.Fill(Me.DsBdPipeline.spOpportunity, CType(ActiveStatus, Integer))
Me.ClientTableAdapter.Fill(Me.DsBdPipeline.Client)
Me.ClientTypeTableAdapter.Fill(Me.DsBdPipeline.ClientType)
Me.ClientPriorityTableAdapter.Fill(Me.DsBdPipeline.ClientPriority)
Me.OpportunityStatusTableAdapter.Fill(Me.DsBdPipeline.OpportunityStatus)
Me.MarketSegmentTableAdapter.Fill(Me.DsBdPipeline.MarketSegment)
Me.ProcurementTypeTableAdapter.Fill(Me.DsBdPipeline.ProcurementType)
Me.BusDevProjectTableAdapter.Fill(Me.DsBdPipeline.BusDevProject)
Me.ProjectTableAdapter.Fill(Me.DsBdPipeline.Project)
Me.StateTableAdapter.Fill(Me.DsBdPipeline.State)
Me.OrgMapTableAdapter.Fill(Me.DsBdPipeline.OrgMap)
Me.EmployeeTableAdapter.Fill(Me.DsBdPipeline.Employee)
Me.ClientServiceManagerViewTableAdapter.Fill(Me.DsBdPipeline.ClientServiceManagerView)

1 个答案:

答案 0 :(得分:1)

老实说,我不知道为什么这会为一些用户而不是其他用户带来麻烦的原因和原因,但这就解决了这个问题。

我将其追溯到在backgroundworker TableAdapter.Fill方法中执行的DoWork方法。对我来说,在后台线程上执行并且没有使用它的进度更新UI的事情对我来说没有任何意义,会导致UI无响应。所以我认为它必须是TableAdapter填充绑定到UI组件并导致问题(只有上帝知道原因)。

所以我从控件中取出了所有设计时数据绑定。我重新排序了这些内容,以便在后台工作线程中TableAdapter填充。在RunWorkerCompleted方法中,我将控件绑定到BindingSource。

瞧,问题解决了。