2012-04-11 2 views
1

Я использую backgroundworker, чтобы заполнить кучу наборов данных, используя tableadapter.fill(). По какой-то причине они заставляют пользовательский интерфейс не реагировать. Как это вообще возможно? Я не сообщаю о какой-либо информации обратно в пользовательский интерфейс с ним ... он просто должен работать в фоновом режиме, без прогресса.BackgroundWorker_DoWork вызывает пользовательский интерфейс, который не отвечает?

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

+0

BackgroundWorker - это .NET 2.0. Используйте библиотеку Parallels Task (http://msdn.microsoft.com/en-us/library/dd537609.aspx) –

+0

Хорошо, есть код в методе BackgroundWorker_DoWork – richard

ответ

1

Честно говоря, я не знаю, почему это и wherefores о том, почему это была проблема для некоторых пользователей, а не другие, но вот то, что исправили проблему.

Я проследил его до TableAdapter.Fill методов, выполняемых в backgroundworker DoWork метода. Для меня не имело никакого смысла, что что-то, выполняемое на фоновом потоке и не обновляющее пользовательский интерфейс с его прогрессом, приведет к тому, что пользовательский интерфейс будет невосприимчивым. Поэтому я решил, что это должно быть то, что заполняет TableAdapter, связавшись с компонентом пользовательского интерфейса и вызывая проблемы (только Бог знает почему).

Таким образом, я взял все элементы привязки времени разработки с элементов управления. Я переупорядочил вещи так, чтобы в потоке рабочего стола заполнялась TableAdapter. В методе RunWorkerCompleted я привязываю элементы управления к BindingSource.

И вуаля, проблема решена.

+1

+1 для публикации вашего решения. Извините, прокомментировать старый поток, как это, но я столкнулся с чем-то, что может помочь тем, кто ищет это. У меня была такая же проблема и попробовал решение, но через несколько секунд пользовательский интерфейс все равно будет заблокирован.Я обнаружил, что свойство моего DataGridView было причиной блокировки пользовательского интерфейса, хотя я знал, что у меня нет проблем с перекрестными потоками, и что мой BackGroundWorker/Task был настроен правильно. AutoSizeColumnsMode или AutoSizeRowsMode блокируют пользовательский интерфейс при запросах, длительностью более 3 или 4 секунд. Отклонить или установить это на «none», это исправит – waltmagic

Смежные вопросы