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