В WPF как показать измененное состояние на элементах управления до и после завершения процесса, требующего много времени? - PullRequest
1 голос
/ 29 января 2009

Метод LoadIt (), приведенный ниже, занимает 5-10 секунд. Я хочу, чтобы в области сообщений отображалось «Загрузка ...» до запуска LoadIt (), а после завершения - «Перезагрузка».

Как я могу это сделать?

Следующий код не работает. Кажется, он не обновляет метку до тех пор, пока все не будет завершено, и в этот момент она просто снова отображает «Reloaded».

private void Button_Click(object sender, RoutedEventArgs e)
{
    lblMessage.Text = "Loading...";
    LoadIt();
    lblMessage.Text = "Reloaded";
}

Ответы [ 3 ]

1 голос
/ 29 января 2009

Вы можете использовать объект Dispatcher для запуска задач в фоновом потоке:

public delegate void LoadItDelegate();

this.Dispatcher.BeginInvoke(
    System.Windows.Threading.DispatcherPriority.Background,
    new LoadItDelegate(LoadIt));

Убедитесь, что он находится в фоновом режиме, потому что поток пользовательского интерфейса имеет больший приоритет, поэтому пользовательский интерфейс обновляется ... и также переместите ваше сообщение "Я закончил" в конец вашего метода LoadIt:)

1 голос
/ 29 января 2009

Здесь обсуждается более одного решения:

http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/6fce9b7b-4a13-4c8d-8c3e-562667851baa/

1 голос
/ 29 января 2009

вы можете переместить LoadIt в отдельный поток, или вы можете смоделировать приложение WinForms. DoEvents, но это довольно хак

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...