Один раз запустить поток на веб-сайте Asp.net Global.asax - PullRequest
0 голосов
/ 03 июня 2010

У меня есть устаревшее приложение, использующее Asp.Net WebSite (winforms ...), и мне нужно запустить фоновый поток, который периодически собирает некоторые файлы. Но этот поток должен запускаться только один раз!

Моя проблема начинается, когда я помещаю метод в Application_Start:

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

Итак, я запускаю свое приложение в Visual Studio и запускаются три потока.

Мне нужен синглтон? или что-то?

1 Ответ

1 голос
/ 03 июня 2010

Попробуйте создать статический метод и переменную:

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();
}
...