使用MVP架构的WinForms中BackGroundWorker的最佳实践
我正在开展一个winforms项目。 我正在实现一个MVP架构。 我在演示者处运行了一些处理密集型作业(从文件系统读取并对数据库执行批量插入)。 我想在后台线程中执行这些操作,而不会锁定UI并更新我的视图上的控件(进度条和datagridview)。
我应该只是通过让视图事件处理程序触发演示者正在侦听的事件来访问演示者中的backgroundworker对象并在演示者中处理它的事件吗?
例如:
在视图中:
private void backgroundWorker_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e) { if (WorkerProgressChange != null) { WorkerProgressChange(this, EventArgs.Empty); } }
在演示者中:
_view.WorkerProgressChange += UpdateView;
这看起来合情合理吗? 有人能提供更好的模特吗?
谢谢!
不应该由演示者召唤工作 – 添加另一个完成工作的模型单元并从控制器调用工作(可以通过gui)。
(让视图引发一个由控制器处理的工作事件,它召唤后台工作者并在更新/完成时调用视图)。
我认为这种观点应该尽可能地被动。 演示者应该自己处理来自BackgroundWorker的事件并将此信息转换为视图(例如,更新网格中显示的列表)。 对于该视图,此请求应该与数据直接来自演示者的情况没有什么不同。