c# - WinForms 中使用 MVP 架构的 BackGroundWorker 最佳实践

标签 c# winforms backgroundworker mvp

我正在开发一个 winforms 项目。我正在实现 MVP 架构。我在演示器上运行一些处理密集型作业(从文件系统读取并对数据库执行批量插入)。我想在后台线程中执行这些操作,而无需锁定 UI 并更新 View (进度条和 datagridview)上的控件。

我是否应该访问演示者中的后台工作对象并通过让 View 事件处理程序触发演示者正在监听的事件来处理演示者中的事件?

例如:

在 View 中:

private void backgroundWorker_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e)
        {
            if (WorkerProgressChange != null)
        {
            WorkerProgressChange(this, EventArgs.Empty);
        }
    }

在演示者中:

_view.WorkerProgressChange += UpdateView;

这看起来合理吗?有人可以提供更好的模型吗?

谢谢!

最佳答案

演示者不应调用工作 - 添加另一个执行该工作的模型单元并从 Controller 调用该工作(可以通过 GUI)。

(让 View 引发一个工作事件,由 Controller 处理,该事件调用后台工作人员并在更新/完成时调用 View )。

关于c# - WinForms 中使用 MVP 架构的 BackGroundWorker 最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2349380/

相关文章:

c# - Winform UserControl 中的点击事件

c# - BackgroundWorker 中未处理的异常

asp.net - Hangfire 如何处理应用程序域重启?

c# - Math.Truncate(number) 的问题

c# - String.Normalize equvilent 在 Windows Phone 上用于 Unicode 组合

c# - 从所有 IEnumerables 中的所有 IEnumerables 获取所有对象

c# - 是否可以从另一个表单触发点击事件?

c# - 如何从 View 中获取在文本框中输入的值

c# - 系统绘图反转区域构建路径

c# - Application.Wait 或 Thread.Sleep