C #, Могу ли я проверить блокировку, не пытаясь ее получить?

У меня есть блокировка в моем веб-приложении на C #, которая не позволяет пользователям запускать скрипт обновления после его запуска.

Я думал, что поместил бы уведомление на свою главную страницу, чтобы пользователь знал, что данные еще не все.

В настоящее время я так блокирую.

protected void butRefreshData_Click(object sender, EventArgs e)
{
    Thread t = new Thread(new ParameterizedThreadStart(UpdateDatabase));
    t.Start(this);
    //sleep for a bit to ensure that javascript has a chance to get rendered
    Thread.Sleep(100);
}


public static void UpdateDatabase(object con)
{
    if (Monitor.TryEnter(myLock))
    {
        Updater.RepopulateDatabase();
        Monitor.Exit(myLock);
    }
    else
    {
        Common.RegisterStartupScript(con, AlreadyLockedJavaScript);
    }
}

И я не хочу делать

if(Monitor.TryEnter(myLock))
    Monitor.Exit(myLock);
else
    //show processing labal

Насколько я понимаю, существует небольшая вероятность того, что он может отображать уведомление, когда оно фактически не запущено.

Есть ли альтернатива, которую я могу использовать?

Изменить:
Всем привет, большое спасибо за ваши предложения! К сожалению, я не мог заставить их работать ... Однако я объединил идеи по двум ответам и придумал собственное решение. Кажется, пока он работает, но мне нужно дождаться завершения процесса ...

Хорошо, похоже, это работает, я выделил метод Repopule в его собственный класс.

public static class DataPopulation
{
    public static bool IsUpdating = false;
    private static string myLock = "My Lock";
    private static string LockMessage = @"Sorry, the data repopulation process is already running and cannot be stopped. Please try again later. If the graphs are not slowly filling with data please contact your IT support specialist.";
    private static string LockJavaScript = @"alert('" + LockMessage + @"');";
    public static void Repopulate(object con)
    {
        if (Monitor.TryEnter(myLock))
        {
            IsUpdating = true;
            MyProjectRepopulate.MyProjectRepopulate.RepopulateDatabase();
            IsUpdating = false;
            Monitor.Exit(myLock);
        }
        else
        {
            Common.RegisterStartupScript(con, LockJavaScript);
        }
    }
}

В мастере я делаю

protected void Page_Load(object sender, EventArgs e)
{
    if (DataPopulation.IsUpdating)
        lblRefresh.Visible = true;
    else
        lblRefresh.Visible = false;
}
]
9
задан Biff MaGriff 11 February 2011 в 13:37
поделиться