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