На форме есть прогрессбар, который заполняется в несколько шагов, по мере загрузки ресурсов, примерно так:
void LoadResources() {
LockUI(); // выключаем кнопки и т.д.
LoadImages();
progressBar1.Value = 25;
LoadMusic();
progressBar1.Value = 50;
LoadFonts();
progressBar1.Value = 75;
LoadIcons();
progressBar1.Value = 100;
UnlockUI(); // включаем кнопки и т.д.
}
При этом форма с этим прогрессбаром не должна зависать во время выполнения. Самым очевидным решением кажется Task.Run, в котором будет этот метод, но все, что я знаю, это то, что придется выключить флаг Control.CheckForIllegalCrossTreadCall, иначе будет эксепшен. Но я так понимаю, что сам по себе подход не очень правильный, да и этот флаг стоит тоже не просто так, а его отключение это костыль. Как делается правильно?