我正在使用一个后台工作程序,它从数据库中获取接下来的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
我正在将数据表合并到网格的数据源。
答案 0 :(得分:1)
如果你发布了一些你抛出的代码或异常,那么追踪是有益的。
但是,我猜你可能会尝试在非ui线程中更新你的UI相关活动或者你可能会做一些不安全的事情。
简单地说,将与数据库相关的阅读操作放在DoWorkEventHandler
和RunWorkerCompletedEventHandler
内的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
}
}