需要为长时间运行的工作提供模式或解决方案,该工作在循环中执行,并在每个线程完成后更新UI
本文关键字:工作 执行 线程 更新 UI 循环 运行 长时间 解决方案 模式 | 更新日期: 2023-09-27 18:16:45
我有一个基本的场景,我需要完成一个任务列表,其中UI在每个任务之后更新,并且任务必须按顺序执行。
我有一个WPF应用程序,需要处理n个对指定数据库的请求,并且在每个任务之后,我需要使用任务的结果更新应用程序。
foreach(var task in tasks)
{
// create thread for task to hit a database
// update ui with result from the task
}
如果我这样做没有线程,UI不会更新,直到所有任务完成,应用程序冻结,直到每个任务完成。
UI将在数据网格中添加一行,显示在数据库上执行的每个"任务"的结果。
谢谢,
bmm
带有进度报告的BackgroundWorker
将完全做到这一点。您可以在UserState
属性中包含任何您需要的内容,并将其应用于ProgressChanged
事件处理程序。
您可以使用新的Task
类,它具有方便的ContinueWith
方法,该方法允许您在当前任务完成后将更多工作排队。见:http://msdn.microsoft.com/en-us/library/system.threading.tasks.task.aspx。
- 用初始动作实例化任务
- 继续更新GUI
- 继续下一个任务
- 返回步骤2
你也可以使用ThreadPool
下面是一个例子。
ThreadPool.QueueUserWorkItem(delegate
{
//Do something
//Update ui.
TextBox.Dispather.Invoke((Action)(() =>
{
//Update the control
}));
});