如何在C#Web应用程序中管理线程?

时间:2011-01-06 22:23:43

标签: c# asp.net multithreading

我构建了一个显示图表的小型Web应用程序。我认为应用程序的超级用户进行完整的数据刷新可能会有用,但是这个过程大约需要10分钟才能完成。我想也许用户可能会点击一个按钮,该按钮将启动一个新线程进行数据刷新,随后的点击将终止线程并重新启动数据填充过程。然后,用户可以自由浏览网站并在填充数据时查看图表。

有没有一种简单的方法来完成这样的事情?

3 个答案:

答案 0 :(得分:1)

您可以扭曲ASP.NET来执行此类操作,但它违反了一些适用于ASP.NET开发的一般规则 - 并且可能确实会导致服务器场出现问题。

因此,最明显的方法是在Web服务中完成这项工作。如果需要,您可以让方法返回一大块HTML。您还可以添加状态方法以查看线程的进展情况。

答案 1 :(得分:1)

其他选项包括:将强烈的处理交给数据库服务器(听起来这可能是一个很好的OLAP使用),或者另一个便宜的技巧可能是设置点击以触发在其上运行的计划任务服务器。你能提供一些关于环境的更多细节吗?单服务器?数据存储平台,版本为.net?

答案 2 :(得分:1)

好的,我没有使用任何一个答案,所以这就是我所做的。我决定如果后续点击将终止而不是当前正在执行的点击会更好。谢谢你的答案。

//code behind
protected void butRefreshData_Click(object sender, EventArgs e)
{
    Thread t = new Thread(new ThreadStart(DataRepopulater.DataRepopulater.RepopulateDatabase));
    t.Start();       
}

//DataRepopulater.cs
namespace DataRepopulater
{
    public static class DataRepopulater
    {
    private static string myLock = "My Lock";
    public static void RepopulateDatabase()
    {
        if(Monitor.TryEnter(myLock))
        {
            DoWork();
            Monitor.Exit(myLock);
        }
    }
}
相关问题