我在 c# 中有一个多层应用程序,它应该在数据库上执行任务(如果第一次使用,我们可能会创建数据库并用一些数据填充它)。当我最初设计应用程序时,我没有考虑可能的进度条控件,更不用说任何形式的进度报告了。如何修改应用程序的设计以便能够向 UI 层报告数据库操作进度?是否有一个可重复使用的解决方案,并且不会强迫我修改我的所有功能以获取额外的报告输入?
3 回答
正如格雷格所说,前面还有很多工作要做。然而,有很多方法可以解决这个问题,最适合您的方法取决于已经从客户端传递到应用程序/数据库层的上下文信息。例如,如果会话令牌或事务标识符在执行查询/事务的正常过程中从客户端传递到应用程序,或者从应用程序异步传回客户端的确认引用,那么对于那些查询/事务,进度报告是必要的,您可以让应用程序更新客户端可以查询的状态表。这可以减少所需的返工量。基本上,您需要考虑已经到位的“中间件”,看看是否可以利用其中任何一个来关联跨层的事务。
不。根据您的应用程序的大小,您有很多工作要做。
要使进度报告工作,您需要执行工作的代码在完成一个工作单元时引发事件。该事件需要在 UI 层处理并更新进度指示器。
一个好的起点是研究使用 BackgroundWorker(在 MSDN 上有一个示例 - http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx)。熟悉 BackgroundWorker 后,您应该能够更好地决定需要对应用程序进行哪些更改。
您可以修改服务器代码,以便它在服务器端更新进度信息(不更改函数签名),然后有一个单独的方法可以单独查询此信息。
这将允许您改进对进度的支持,而不会对您对服务器的现有调用产生任何影响,只需在 UI 上添加一个新的后台线程,以便在长时间运行的任务正在进行时检查更新的进度信息。
编辑:我想同样的方法适用于客户端中发生的任务。但是,这里也可以使用静态进度指示器类。