c# - WinForms 中的数据绑定(bind)执行异步数据导入

标签 c# winforms multithreading data-binding

我有一个场景,我有一组对象绑定(bind)到 winforms 中的数据网格。如果用户将一个项目拖放到网格上,我需要在网格中添加一个占位符行并启动一个冗长的异步导入过程。我需要将异步导入过程的状态传回 UI,更新网格中的行并让 UI 保持响应以允许用户编辑其他行。

执行此操作的最佳做​​法是什么?

我目前的解决方案是:绑定(bind)一个 thread safe implementation of BindingList到网格,填充在网格中显示为行的对象。当用户将一个项目拖放到网格上时,我创建了一个新对象,其中包含从拖放项目中获得的稀疏信息,并将其添加到 BindingList,禁用对该行的编辑。然后我启动一个单独的线程来执行导入,将我刚刚创建的新绑定(bind)对象传递给它以填充数据。导入过程定期设置对象的状态并触发 UI 订阅的事件,告诉它刷新网格以查看对象的新属性。

我应该将绑定(bind)到网格的同一个对象传递给导入进程线程进行操作,还是应该创建一个副本并使用 BeginInvoke 将对对象的更改合并回 UI 线程?

此实现有任何问题或建议吗?

谢谢

最佳答案

好的...

我看到事件的流程是这样的:

  1. 用户将项目拖放到网格中
  2. 异步进程启动
  3. 用户界面已更新以显示“正在处理”
  4. 回调处理程序获取异步进程的响应
  5. 异步回调更新绑定(bind)源
  6. 异步回调调用网格上的“databind”来刷新 View 以包含新数据。

我会使用线程而不是后台 worker ,但我非常有信心使用线程。

后台 worker 确实简化了线程,如果您没有信心,那将是我推荐的起点。

这样您就可以同时更新源代码和用户界面,并且用户可以在处理过程中继续使用该应用程序。

关于c# - WinForms 中的数据绑定(bind)执行异步数据导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2330445/

相关文章:

C# - ListBox/ListView 同时支持数据绑定(bind)和缩略图

java - 在线程内运行线程, "Class exception error "

c# - 什么是 C# 中的 Delphi FillChar?

c# - GPS/GIS 计算 : Algorithm to predict future position based on movement/mph?

c# - ASP.net 返回带有数据变量的 View

python - 何时使用线程以及使用多少线程

java - 即使任务尚未完成,如何停止执行程序服务线程?

c# - 通过单元格的值设置选定的行datagridview

c# - 通过窗体传递值 C#

c# - Winforms - C# 任务栏进度指示器 (Windows 10)