后台工作人员使我的应用程序挂起

时间:2015-07-07 07:12:50

标签: c# sql-server-2005 backgroundworker

我正在使用一个后台工作程序,它从数据库中获取接下来的100条记录,并在运行时将其绑定到网格。它工作正常,但我的应用程序挂起虽然网格显示正确。我为所有其他屏幕使用后台工作程序用于相同的目的。如果我打开任何屏幕,它就会挂起。

我也经历了this,但它没有帮助。

这是我的DoWork事件处理程序代码。

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

in addNewRecords我正在将数据表合并到网格的数据源。

3 个答案:

答案 0 :(得分:1)

如果你发布了一些你抛出的代码或异常,那么追踪是有益的。

但是,我猜你可能会尝试在非ui线程中更新你的UI相关活动或者你可能会做一些不安全的事情。

简单地说,将与数据库相关的阅读操作放在DoWorkEventHandlerRunWorkerCompletedEventHandler内的UI相关内。您还可以在更新UI控件之前检查线程关联。

答案 1 :(得分:0)

检查worker中的无限循环。在某些条件下打破循环。

答案 2 :(得分:0)

您无法与后台工作者的UI线程进行交互。但是,您可以使用委托来更新UI控件。

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
    }
}