【问题标题】:Tracking the process of a singleton process in a web application跟踪 Web 应用程序中单例进程的进程
【发布时间】:2010-01-26 19:55:09
【问题描述】:

当我点击运行按钮(在我的 Default.aspx 中)时,会启动一个进程(此进程会联系 Web 服务以获取一些文件等)。我该怎么做:

  1. 确保一次只运行一个进程(即,如果我刷新浏览器,我不想再次启动该进程)

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

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

【问题讨论】:

    标签: c# .net asp.net multithreading singleton


    【解决方案1】:

    以相反的顺序回答它们:

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

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

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

    【讨论】:

    • 谢谢。您能否解释一下为什么在这种情况下我需要线程?我只有一个进程,没有并行活动。如果我将 Process 对象(或者只是具有 IsRunning 属性的 Status 对象)存储在 HttpApplicationState 中,我可以在每次刷新浏览器时访问正在运行的进程对吗?
    • @Swami。实际上,您确实有多个线程。如果您在处理页面的同一线程上运行您的请求,则该页面将永远不会返回给用户。所以这就是为什么你要启动一个新线程来处理你的任务。此外,您不希望将 IIS 线程与诸如处理活动之类的后台活动捆绑在一起。
    • @Keltex。谢谢...还有一个问题...我想确保如果该页面是从另一台计算机上的浏览器打开的,并且该进程正在运行,则该页面应指示状态,而不是显示“运行”按钮。这可能吗?
    • @Swami 是的。因为当页面加载时,你会检查互斥体以查看进程是否正在运行。如果是这样,请不要显示按钮,而是显示状态。单例对象可以存储互斥体和对线程的引用。
    • @Keltex。由于这是一个网络应用程序,我还需要将我的单例存储在 HttpApplicationState 中吗?
    猜你喜欢
    • 1970-01-01
    • 2011-03-15
    • 2011-05-06
    • 2013-04-10
    • 2010-12-24
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多