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