【问题标题】:Doing UI Work in the background在后台做 UI 工作
【发布时间】:2011-07-18 20:59:11
【问题描述】:

使用 UI 进行后台工作并知道它何时结束的最简单方法是什么?

【问题讨论】:

  • 你可能想指定你想要的:你想在后台做ui工作(比如构建它并显示复杂的图形)还是你想让GUI在后台启动工作但 UI 是否保持响应?
  • @bill K - 我想在后台执行数据库查询并填充 ListView 控件。
  • 您希望在运行查询时保持 UI 活动,还是希望在每次获取新数据时更新 ListView 控件?如果确实不需要部分更新,则不应执行此操作。第一个替代方案更容易实现,而且性能也应该更好。
  • @mgronber - 我对第一个选择很满意。
  • @J.T.S.:然后检查我在答案中发布的链接。它应该非常清楚如何存储中间数据。

标签: c# .net mysql winforms multithreading


【解决方案1】:

【讨论】:

  • 我有,这就是让我悲痛的原因:“跨线程操作”错误...我正在尝试使用 backgroundworker 在后台填充列表视图控件
  • JTS - 您必须使用 BackgroundWorker 上的 ProgressChanged 事件来进行更新 - 您不能从后台工作本身进行更新。
  • 如果您需要从另一个线程与 UI 交互,请查看 invoke/begininvoke
  • 我明白这一点,但我如何能够将从 DoWork 方法内部从数据库中检索到的每一行/列信息传递给 ProgressChanged 事件?我有想过,但做不到。我不明白我该怎么做?
  • @Fredrik Leijon - 如果我将它作为数据集返回,我可以执行类似 listView1.Data = dataSet1; 的操作吗? ? (例如)所以在 ProgressChanged 事件中,我可以将数据集中的所有内容都转移到列表视图中?
【解决方案2】:

我猜你会从 Joseph Albahari 的 Threading in C#, part 3 中受益。尤其是“Subclassing BackgroundWorker”部分应该很有用。

【讨论】:

    猜你喜欢
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多