在Asp.net WebSite Global.asax中只触发一次Thread

时间:2010-06-02 21:16:03

标签: asp.net winforms global-asax

我使用Asp.Net WebSite(winforms ...)的遗留应用程序,我需要运行一个后台线程,定期收集一些文件。 但是这个线程必须运行一次!

当我在Application_Start中放置一个方法时,我的问题开始了:

void Application_Start(object sender, EventArgs e) {
    SetConnection();
    SetNHibernate();
    SetNinject();
    SetExportThread();
}

所以我在Visual Studio上启动应用程序并开始运行三个线程。

我需要一些单身人士吗?还是什么?

1 个答案:

答案 0 :(得分:1)

尝试创建静态方法和变量:

private static bool _inited = false;
private static object _locker = new object();
private static void Init()
{        
    if (!_inited)
    {
        lock(_locker)
        {
            // Have to check again because the first check wasn't thread safe
            if (!_inited)
            {
                SetConnection();
                SetNHibernate();
                SetNinject();
                SetExportThread();
                _inited = true;
            }
        }
    }
}

void Application_Start(object sender, EventArgs e)
{
    Init();
}