0

На форме есть прогрессбар, который заполняется в несколько шагов, по мере загрузки ресурсов, примерно так:

void LoadResources() {
   LockUI(); // выключаем кнопки и т.д.
   LoadImages();
   progressBar1.Value = 25;
   LoadMusic();
   progressBar1.Value = 50;
   LoadFonts();
   progressBar1.Value = 75;
   LoadIcons();
   progressBar1.Value = 100;
   UnlockUI(); // включаем кнопки и т.д.
}

При этом форма с этим прогрессбаром не должна зависать во время выполнения. Самым очевидным решением кажется Task.Run, в котором будет этот метод, но все, что я знаю, это то, что придется выключить флаг Control.CheckForIllegalCrossTreadCall, иначе будет эксепшен. Но я так понимаю, что сам по себе подход не очень правильный, да и этот флаг стоит тоже не просто так, а его отключение это костыль. Как делается правильно?

YD359
  • 145
  • https://ru.stackoverflow.com/a/418463/220553 – EvgeniyZ Apr 05 '22 at 18:03
  • https://ru.stackoverflow.com/a/1112357/373567 https://ru.stackoverflow.com/a/1134235/373567 и учить асинхронное программирование – aepot Apr 05 '22 at 18:36
  • Обращаться к контролам из стороннего потока можно например через IProgress https://ru.stackoverflow.com/a/1116941/373567 или Invoke(), ни в коем случае не трогайте CheckForIllegalCrossTreadCall, иначе никогда не научитесь многопоточке и наплодите багов. – aepot Apr 05 '22 at 18:41

0 Answers0