.NET 4.x Как перейти к основному потоку из фонового - C#

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

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

Есть некая программа со сплешем, в сплеше создается поток который выполняет работу и выводит статус того что он делает. Как можно вернуться из этого потока в основной и заставить продолжить код Вот код класса
Листинг программы
  1. public Splash()
  2. {
  3. Thread _thread = new Thread(new ThreadStart(ThreadWorker));
  4. InitializeComponent();
  5. state.Text = "";
  6. state.Text = "Запускаем...";
  7. _thread.Name = "StartupThread";
  8. _thread.IsBackground = true;
  9. _thread.Start();
  10. // вернуться сюда и продолжить код
  11. Main _mainfrm = new Main();
  12. _mainfrm.Show();
  13. }
  14. private void Splash_FormClosing(object sender, FormClosingEventArgs e)
  15. {
  16. e.Cancel = true;
  17. }
  18. void ThreadWorker()
  19. {
  20. Thread.Sleep(3000);
  21. state.Invoke(new Action(() => { state.Text = "Вход в систему..."; } ));
  22. if (string.IsNullOrEmpty(Usable.Settings.Login) || string.IsNullOrEmpty(Usable.Settings.Password))
  23. {
  24. var _dlg = new Login().ShowDialog();
  25. switch (_dlg)
  26. {
  27. case DialogResult.OK:
  28. Worker.Login(Usable.Settings.Login, Usable.Settings.Password);
  29. break;
  30. default:
  31. //Close();
  32. Environment.Exit(1);
  33. break;
  34. }
  35. }
  36. else
  37. Worker.Login(Usable.Settings.Login, Usable.Settings.Password);
  38. if (Usable.LoginedUser != null)
  39. {
  40. state.Invoke(new Action(() => { state.Text += " " + Usable.LoginedUser.Username + " Успешно!"; }));
  41. Thread.Sleep(2000);
  42. }
  43. else if (Usable.LoginedUser == null)
  44. {
  45. //Close();
  46. Environment.Exit(1);
  47. }
  48. state.Invoke(new Action(() => { state.Text = "Получаем данные о пользователе..."; }));
  49. progressBar1.Invoke(new Action(() => { progressBar1.Style = ProgressBarStyle.Continuous; progressBar1.Maximum = 2; }));
  50. System.Net.WebClient _wbc = new System.Net.WebClient();
  51. Usable.Avatar = _wbc.DownloadData(Usable.LoginedUser.AvatarUrl.Replace(".gif", ".png"));
  52. progressBar1.Invoke(new Action(() => { progressBar1.Value++; }));
  53. Usable.UserPastes = Usable.LoginedUser.GetPastes(1000);
  54. progressBar1.Invoke(new Action(() => { progressBar1.Value++; }));
  55. progressBar1.Invoke(new Action(() => { progressBar1.Style = ProgressBarStyle.Marquee; }));
  56. state.Invoke(new Action(() => { state.Text = "Открываем приложение..."; }));
  57. Thread.Sleep(3000);
  58. Invoke(new Action(() => { Close(); }));
  59. }
up!

Решение задачи: «.NET 4.x Как перейти к основному потоку из фонового»

textual
Листинг программы
  1. public Splash()
  2.         {            
  3.             InitializeComponent();
  4.             ThreadWorker();
  5.         }
  6.  
  7.         async void ThreadWorker()
  8.         {              
  9.             await Task.Run(
  10.                 ()=>
  11.                 {
  12.                     Thread.Sleep(30000);
  13.                     //Тут выполняется что-то долгое
  14.                     //И основная форма не висит
  15.                 }
  16.                 );
  17.  
  18.             //Тут делаем что-то с результатом
  19.             //Форму тут можно создать по результатам работы          
  20.  
  21.         }

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


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

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

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

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

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

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