Выполнение метода в отдельном потоке без await/async - C#

Узнай цену своей работы

Формулировка задачи:

В

десктопном WPF проекте с .Net 4.0

необходимо сделать так:
private void updateNowButton_Click(object sender, RoutedEventArgs e)
        {
            ProgressBar1_IsIndeterminateUpdate.Visibility = Visibility.Visible;
            //здесь вызываем метод длительного решения задачи
            ProgressBar1_IsIndeterminateUpdate.Visibility = Visibility.Collapsed;
        }
Пытался по разному, но как ни крути прогресс баг не появляется, наверно блочиться UI-поток((( К примеру в

Windows Phone 8.1 приложении с .Net 4.5

я делал так и оно там работало.
Нашел ответ, получилось вот так:
private void startBar_Click(object sender, RoutedEventArgs e)
        {
            ProgressBar1.Visibility = Visibility.Visible;
 
                Task<Boolean>.Factory.StartNew(() =>
                {
                    getMethod("all");
                    Thread.Sleep(5 * 1000);
                    return true;
                }).ContinueWith(t =>
                {
                    if (t.Result)
                    {
                        //метод отработал
                        ProgressBar1.Visibility = Visibility.Collapsed;
                    }
                }, TaskScheduler.FromCurrentSynchronizationContext());  
 
            //ProgressBar1.Visibility = Visibility.Collapsed;
        }
работает, но как то некрасиво получается с эстетической точки зрения. Как то можно это громоздкое выражение заменить более аккуратным?

Решение задачи: «Выполнение метода в отдельном потоке без await/async»

textual
Листинг программы
//Capture the thread
        thread = Thread.CurrentThread;
//потом
//Cancel the task by aborting the thread
    thread.Abort();

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.167 из 5
Похожие ответы