BackgroundWorker_DoWork导致UI无响应?
我正在使用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)
老实说,我不知道为什么就是为什么这是有一些用户,而不是其他的麻烦wherefores,但这里是固定的问题。
我它追溯到TableAdapter.Fill
方法BackgroundWorker的DoWork
方法执行。对于我来说,在后台线程上执行某些操作并且没有随着进程更新UI而对UI造成不响应是没有意义的。所以我认为它必须是TableAdapter正在填充绑定到UI组件并导致问题(只有上帝知道为什么)。
所以我把所有的设计时关闭数据绑定控件。我重新排列了一些东西,以便在后台工作线程中填入TableAdapter
。在RunWorkerCompleted
方法中,我将控件绑定到BindingSource。
瞧,问题就迎刃而解了。
+1用于发布您的解决方案。很抱歉对这样的旧线索发表评论,但我遇到了一些可能有助于搜索此内容的人。我在这里遇到了同样的问题,并试着发布解决方案,但几秒钟后UI仍然会锁定。我发现我的DataGridView的属性是导致UI锁定,即使我知道我没有跨线程问题,并且我的BackGroundWorker/Task已正确安装。 AutoSizeColumnsMode或AutoSizeRowsMode都会锁定运行时间超过3或4秒的查询的用户界面。解散或将其设置为“无”将修复它 – waltmagic 2015-02-24 17:38:47
你能证明你的代码,所以我们可以找出问题? – cubski 2012-04-11 02:23:32
BackgroundWorker是如此的.NET 2.0。使用任务的Parallels库(http://msdn.microsoft.com/en-us/library/dd537609.aspx) – 2012-04-11 02:25:40
确定没有在BackgroundWorker_DoWork方法 – richard 2012-04-11 02:25:50