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

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

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

В

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

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

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

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

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

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

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


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

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

6   голосов , оценка 4.167 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы