我在我的c#应用程序中有一个Background Worker和一个DataGrid。在我的Backgroundworker的工作中,我将在我的dll中调用一个Api,它将在SQLite数据库中输入一些数据。完成我的Api调用后,我报告Backgroundworker的进度和正在进行的事件,我从Db获取内容并将其作为DataSource分配给我的网格。我在同一个背景工作者中调用相同的API。在处理我的应用程序崩溃的过程中。但是如果我不在ProgressChanged中分配dataSource,我的应用程序不会崩溃。从BackGroundWorker更新DataGrid
0
A
回答
4
我假设你必须使用Invoke方法访问UI对象。
如果不尝试使用以下方法(执行指定委托,在拥有控件的基础窗口句柄的线程,用指定的参数列表。):
//In Form.Designer.cs
Label myLabel = new Label();
//In code behind under Background worker method
LabelVlaueSetter SetLabelTextDel = SetLabelText;
if (myLabel .InvokeRequired)
{
myLabel.Invoke(SetLabelTextDel, "Some Value");
}
private delegate void LabelVlaueSetter(string value);
//Set method invoked by background thread
private void SetLabelText(string value)
{
myLabel.Text = value;
}
+1
BackgroundWorker的重点在于您不需要明确使用BackgroundWorker。 – 2010-03-24 08:02:07
1
它不应该的问题,而是为什么你使用ProgressChanged而不是RunWorkerCompleted?
此外,尝试在没有BackgroundWorker的GUI线程上做所有事情。这会让你知道问题出在你的代码中,或者你的代码和GUI的交互方式。
2
正如约翰森艾伦所提到的,这应该不重要。除非别的事情正在发生。我有两种情况,我无法与BackgroundWorker
生成的事件中的某些控件进行交互。唯一有效的方法是使用Invoke
方法。
尝试在创建DataGridView
控件的相同线程上指定DataSource
。您可以通过控件的Invoke
方法执行此操作。使用下面的代码。 (我还没有测试过,但这是标准模式。)
如果这不起作用,请尝试乔纳森艾伦的建议。
其实,先做哪个建议最容易先尝试。
private delegate void SetDataSourceDelegate(object value);
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e) {
DataTable oData = null; //'assign data source
if (dataGridView1.InvokeRequired) {
dataGridView1.Invoke(new SetDataSourceDelegate(SetDataSource), new Object[] {oData});
}else{
SetDataSource(oData);
}
}
private void SetDataSource(object value) {
dataGridView1.DataSource = value;
}
相关问题
- 1. 使用backgroundworker更新datagrid WPF
- 2. 在BackgroundWorker的主题更新的DataGrid
- 3. BackgroundWorker的更新GUI
- 4. WPF - Datagrid绑定:INotifyPropertyChanged和BackgroundWorker没有UI更新
- 5. wpf BackgroundWorker - 关于更新UI
- 6. 使用BackgroundWorker更新GUI
- 7. progressbar将不会更新backgroundworker?
- 8. C#:更新datagrid
- 9. 更新dojo datagrid
- 10. datagrid列不更新
- 11. 更新一个DataGrid
- 12. MVVM Datagrid从视图和模型更新
- 13. 从Datagrid更新/删除数据
- 14. Silverlight DataGrid从代码更新SelectedItem
- 15. 更新DataProvider时DataGrid刷新
- 16. WPF DataGrid分组未更新更新
- 17. 使用backgroundworker更新progressbar + clipboard.getimage() - WPF C#
- 18. 设置BackgroundWorker的MVVM,更新进度
- 19. C# - BackgroundWorker不断更新控件:错误!
- 20. VB.net 2010 BackgroundWorker的更新形式进度
- 21. WPF BackGroundWorker ProgressChanged不更新文本块
- 22. 更新BackgroundWorker中Winform的状态
- 23. Backgroundworker更新UI上的日志
- 24. C#进度条不会更新backgroundworker
- 25. Backgroundworker - 数据绑定 - 查看更新
- 26. WPF BackgroundWorker完成从子用户控件更新到MainWindow
- 27. 使用BackGroundWorker从另一个表单更新DataGridView
- 28. 如何使用MVVM从BackgroundWorker内部更新ObservableCollection?
- 29. 从BackgroundWorker线程更新图像UI属性
- 30. 无法获得DataGrid更新
你什么异常应用程序崩溃的时候? – 2010-03-24 05:44:43
仅当我单独启动我的应用程序时发生崩溃 – subbu 2010-03-24 05:53:19