C# 在后台执行UI工作

C# 在后台执行UI工作,c#,.net,mysql,winforms,multithreading,C#,.net,Mysql,Winforms,Multithreading,用UI做后台工作并知道何时结束最简单的方法是什么?试试后台工作人员 我想你会从约瑟夫·阿尔巴哈里的作品中受益。特别是“BackgroundWorker子类化”一节应该很有用。您可能需要指定您想要的:您想要在后台进行ui工作吗(比如构建它并显示复杂的图形)还是希望GUI在后台启动工作,但让UI保持响应?@bill K-我希望在后台执行数据库查询并填充ListView控件。是希望在运行查询时保持UI的活动状态,还是希望在每次获得新数据时更新ListView控件?如果实际上不需要部分更新,则不应该这样

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

试试后台工作人员


我想你会从约瑟夫·阿尔巴哈里的作品中受益。特别是“BackgroundWorker子类化”一节应该很有用。

您可能需要指定您想要的:您想要在后台进行ui工作吗(比如构建它并显示复杂的图形)还是希望GUI在后台启动工作,但让UI保持响应?@bill K-我希望在后台执行数据库查询并填充ListView控件。是希望在运行查询时保持UI的活动状态,还是希望在每次获得新数据时更新ListView控件?如果实际上不需要部分更新,则不应该这样做。第一个备选方案更容易实现,而且性能也应该更好。@mgronber-我对第一个备选方案很满意。@J.T.S.:然后检查我在回答中发布的链接。它应该很清楚如何存储中间数据。我有,这就是让我悲伤的原因:“跨线程操作”错误。。。我正在尝试使用backgroundworkerJTS在后台填充listview控件-您必须使用BackgroundWorker上的ProgressChanged事件来进行更新-您不能从后台工作本身进行更新。如果您需要从另一个线程与UI交互,请查看invoke/BeginInvoke我理解,但是,我如何才能将从DoWork方法内部从数据库检索到的每一行/列信息传递给ProgressChanged事件呢?我已经想到了,但做不到。我看不出我能做什么?@Fredrik Leijon-如果我把它作为数据集返回,我能做类似listView1.Data=dataSet1?(例如)在ProgressChanged事件中,我可以将数据集中的所有内容都传输到listview中吗?