2012-04-11 47 views
1

我正在使用backgroundworker来使用tableadapter.fill()填充一堆数据集。出于某种原因,他们导致UI无响应。这怎么可能?我没有向它报告任何信息......它只是在后台运行,没有进度条。BackgroundWorker_DoWork导致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) 
+0

你能证明你的代码,所以我们可以找出问题? – cubski 2012-04-11 02:23:32

+0

BackgroundWorker是如此的.NET 2.0。使用任务的Parallels库(http://msdn.microsoft.com/en-us/library/dd537609.aspx) – 2012-04-11 02:25:40

+0

确定没有在BackgroundWorker_DoWork方法 – richard 2012-04-11 02:25:50

回答

1

老实说,我不知道为什么就是为什么这是有一些用户,而不是其他的麻烦wherefores,但这里是固定的问题。

我它追溯到TableAdapter.Fill方法BackgroundWorker的DoWork方法执行。对于我来说,在后台线程上执行某些操作并且没有随着进程更新UI而对UI造成不响应是没有意义的。所以我认为它必须是TableAdapter正在填充绑定到UI组件并导致问题(只有上帝知道为什么)。

所以我把所有的设计时关闭数据绑定控件。我重新排列了一些东西,以便在后台工作线程中填入TableAdapter。在RunWorkerCompleted方法中,我将控件绑定到BindingSource。

瞧,问题就迎刃而解了。

+1

+1用于发布您的解决方案。很抱歉对这样的旧线索发表评论,但我遇到了一些可能有助于搜索此内容的人。我在这里遇到了同样的问题,并试着发布解决方案,但几秒钟后UI仍然会锁定。我发现我的DataGridView的属性是导致UI锁定,即使我知道我没有跨线程问题,并且我的BackGroundWorker/Task已正确安装。 AutoSizeColumnsMode或AutoSizeRowsMo​​de都会锁定运行时间超过3或4秒的查询的用户界面。解散或将其设置为“无”将修复它 – waltmagic 2015-02-24 17:38:47

相关问题