在Web应用程序中跟踪单例进程的过程

问题描述:

当我点击运行按钮(在我的Default.aspx中)时,一个进程启动(该进程联系web服务来获取一些文件等)。我该怎么办:在Web应用程序中跟踪单例进程的过程

  1. 确保只有一个进程同时运行(即,如果我刷新浏览器,我不想启动过程中的第二次)

  2. 跟踪进度 - 我想跟踪的过程有4个点(25%,50%,75%,100%),每个部分完成时,我想更新进度栏。我有一个正在运行的进程状态对象,但问题是如何自动更新进度栏?

  3. 我是否需要使用线程来实现上述两个?

接听它们以相反的顺序:

  1. 是。你应该有一个对象来封装你的线程。

  2. 你可以有一个你的对象的公共成员,其中包含你的进程%完成。你可以定期轮询。您从HTML页面执行此操作的方式可能是一个AJAX请求,以使您的进度条变得最流畅。

  3. 你需要做一些线程同步。也许通过互斥体。 Here's a good example of how to do this(向下滚动到Mutex)。

开始=>
+0

谢谢。你能解释一下为什么我会在这种情况下需要线程?我只有一个进程而没有并行的活动。如果我在HttpApplicationState中存储Process对象(或者只是具有IsRunning属性的Status对象),那么每次浏览器刷新时我都可以访问正在运行的进程? – Prabhu 2010-01-26 20:22:40

+0

@Swami。你实际上有多个线程。如果您在与处理页面相同的线程上运行请求,则该页面将永远不会返回给用户。所以这就是为什么你想发起一个新的线程来处理你的任务。此外,您不希望将IIS线程与处理活动等后台活动捆绑在一起。 – Keltex 2010-01-26 21:12:52

+0

@Keltex。谢谢...还有一个问题...我想确保如果页面从另一台计算机上的浏览器打开,并且进程正在运行,页面应该显示状态,而不是显示“运行”按钮。这可能吗? – Prabhu 2010-01-26 21:20:16