Информационная Метка - PullRequest
       13

Информационная Метка

2 голосов
/ 19 февраля 2010

Я пытаюсь создать информационную метку, которая должна отображать события, которые выполняет приложение.

удаление данных, чтение данных, запись данных, подключение к БД. и т.д ..

Я добавил метку в свою форму и меняю ее текстовое свойство для каждой операции, например:

label1.Text = "stored procedure is being executed..";

Но во время выполнения текст метки не меняется. Я пытался добавить метод

Application.DoEvents();

для каждого места, где я изменил свойство текста метки. Работает нормально. Но это выглядит глупо. Поэтому я попытался добавить этот метод в событие «TextChanged» моей метки. Но это не работает! Я делаю что-то неправильно? Или,

Есть ли эффективный способ сделать информационную метку?

Ответы [ 3 ]

2 голосов
/ 19 февраля 2010

Вы должны использовать BackgroundWorker ; обработать событие ProgressChanged ; и вызовите ReportProgress в вашем DoWork обработчике. С помощью этого метода вы можете избежать перекрестных исключений.

1 голос
/ 20 февраля 2010

Если бы проблемы были связаны с потоками, вы бы получили исключения.

Приложение не обновляет обновление пользовательского интерфейса, поскольку оно занимается другими делами, такими как попадание в базу данных.

Начните с простого метода в форме, подобной этой:

private void SetStatus(string status)
{
    label1.Text = status;
    Application.DoEvents();
}

Тогда вы просто набираете SetStatus("executing...") и т. Д. В своем коде.

Если вы делаете шаги, вам нужно использовать метод invoke, упомянутый @ Aaron

Фоновые предложения рабочих тоже хороши, но если вышеперечисленное сработает, оно может вам не понадобиться, рабочие делают вещи немного интереснее!

ПК: -)

1 голос
/ 19 февраля 2010

Возможно, установка текста метки происходит в отдельном потоке, чем то, в котором находится метка?Делегат решит эту проблему.

    public void setLabelText(string value)
    {
        if (InvokeRequired)
            Invoke(new SetTextDelegate(setLabelText), value);
        else
            label1.Text = value;
    }

    delegate void SetTextDelegate(string value); 

Всякий раз, когда вы захотите обновить текст вашей метки, вы можете затем вызвать метод setLabelText.

...