WPF 应用程序的多线程策略需要建议

2024-01-19

我正在构建一个单窗口 WPF 应用程序 窗口中是一个列表项(当然,它们保存在数据库中) 我需要定期启动一个后台任务,从 Atom feed 更新数据库。当每个新项目添加到数据库中时,UI 中的列表也必须更新以反映这一点。我不希望这个后台任务减慢 UI,但同时它需要与 UI 交互。

在阅读了大量文章并看到大量简单示例后,我仍然不确定实现此目的的最佳方法。

我想也许我能做的是:

在 Window_Loaded 事件上,创建一个 DispatchTimer。 当 Tick 事件触发时,调用 UpdateDb() 方法。 UpdateDB() 将从 Atom feed 中获取项目并添加到数据库中。当我迭代每个项目时,我将调用另一个方法将列表重新绑定到数据库,以便它“刷新”。 当所有任务完成后重置 DispatchTimer ??? (不确定这是否可以/需要/完成)。

请记住,这是后台任务,因此用户可以同时使用 UI。

这听起来怎么样?

Thanks.


这听起来不太理想,因为您正在 UI 线程上进行数据库连接。当。。。的时候Tick事件触发于DispatcherTimer,处理程序将在 UI 线程上执行。您需要最大限度地减少在此线程上执行的工作量以保持 UI 响应,并且您绝对不应该在此线程上执行 IO 密集型工作。

我可能会有一个数据服务,其职责是更新数据库并在发生更改时引发事件。您的 UI 层可以附加到这些事件并编组到 UI 线程以应用更改。要编组到 UI 线程,您只需调用Dispatcher.Invoke http://msdn.microsoft.com/en-us/library/system.windows.threading.dispatcher.invoke.aspx.

无论您采用哪种具体方法,关键是在单独的线程上尽可能多地执行操作(包括任何数据库访问)。尽可能晚地封送回 UI 线程,并在 UI 线程上执行尽可能少的工作。

另一件需要注意的事情是,WPF 会自动为您将更改编组为标量值。您只需整理对集合的更改(添加/删除/替换项目)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WPF 应用程序的多线程策略需要建议 的相关文章

随机推荐