2015-07-07 4 views
-2

Я использую фона рабочего, который приносит следующие 100 записей из базы данных и привязывает его к сетке во время выполнения. Он работает нормально, но мое приложение зависает, хотя сетка отображается правильно. Я использую фона рабочего для всех других экранов для той же цели. Если я открою любой экран, он зависает.Справочный работник заставляет мое приложение зависать

Я тоже прошел через this, но это не поможет.

Вот мой код для обработчика событий DoWork.

while (bgStop) 
{ 
    e.Result = addNewRecords(); 
    if (Convert.ToBoolean(e.Result) == false) 
    { 
     e.Cancel = true; 
     backgroundWorker1.WorkerSupportsCancellation = true; 
     bgStop = false; 
     killBGWorker(); 
    } 
} 

в addNewRecords я сливая DataTable к источнику данных сетки.

+1

Вы не можете взаимодействовать с UI-потоком от BackgroundWorker – jmc

ответ

0

Проверка на бесконечный цикл в рабочем состоянии. Разбейте петлю на какое-то условие.

1

Было бы полезно отслеживать, если вы разместили часть своего кода или исключение, которое оно выбрасывает.

Однако, возможно, вы пытаетесь обновить свои действия, связанные с пользовательским интерфейсом, в ничейной нити. Или вы можете делать что-то небезопасное.

Просто поместите информацию о работе с базой данных в пределах DoWorkEventHandler и UI, относящихся к RunWorkerCompletedEventHandler. Вы также можете проверить привязанность к потоку перед обновлением элементов управления пользовательского интерфейса.

+0

Пожалуйста, обратитесь моим кодом, который я добавляемый с вопросом. –

0

Вы не можете взаимодействовать с пользовательским интерфейсом от рабочего стола. Однако вы можете использовать делегат для обновления вашего пользовательского интерфейса.

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) 
{ 
    UpdateDataGridView(); 
} 

delegate void UpdateDataGridViewDelegate(string args); 

private void UpdateDataGridView(string args) 
{ 
    if (dataGridView.InvokeRequired) 
     dataGridView.Invoke(new UpdateDataGridViewDelegate(UpdateDataGridView), args); 
    else 
    { 
     //update datagridview 
    } 
} 
Смежные вопросы