【发布时间】:2014-06-12 06:10:59
【问题描述】:
我有一个 .net windows 应用程序(单个表单),有很多按钮,例如从数据库加载数据、下一页、上一页、搜索等。我想在单击所有按钮时使用 backgroundworker,所以我的 UI 没有冻结。
问题是我应该在整个表单中为所有按钮使用 1 个 backgroundworker 对象还是每个按钮使用一个单独的 backgroundworker?
【问题讨论】:
标签: c# backgroundworker
我有一个 .net windows 应用程序(单个表单),有很多按钮,例如从数据库加载数据、下一页、上一页、搜索等。我想在单击所有按钮时使用 backgroundworker,所以我的 UI 没有冻结。
问题是我应该在整个表单中为所有按钮使用 1 个 backgroundworker 对象还是每个按钮使用一个单独的 backgroundworker?
【问题讨论】:
标签: c# backgroundworker
这篇文章很有用,如果您只使用一个,则需要将所有 db 操作包装到一个结果中。否则,您应该使用多个后台工作人员。
Handling multiple operations using BackgroundWorker
多个会更好。
【讨论】:
您可以为此使用任务工厂。无需创建自己的后台工作人员/工作人员,速度更快。
Task<bool> task = Task.Factory.StartNew<bool>
(() => /*Do you button operations */);
您可以在此处阅读有关任务的更多信息:http://msdn.microsoft.com/en-us/library/system.threading.tasks.task.aspx
请注意,这需要 .Net 4.5,如果您的目标是较旧的 Framewroks,请查看线程池: http://msdn.microsoft.com/en-us/library/3dasc8as.aspx
【讨论】: