Инициализация Windows WPF блокирует отдельный поток в .Net 8C#

Место общения программистов C#
Anonymous
Инициализация Windows WPF блокирует отдельный поток в .Net 8

Сообщение Anonymous »

У меня есть следующий код, который я много лет использовал в .Net Framework 4.8 для отображения заставки при запуске:

Код: Выделить всё

      Thread newWindowThread = new Thread(new ThreadStart(() =>
{
WpfSplashScreen splash = new WpfSplashScreen();//Get stuck here!
splash.Show();
Thread.Sleep(3000);
splash.Close();
}));

newWindowThread.SetApartmentState(ApartmentState.STA);
newWindowThread.IsBackground = true;
newWindowThread.Start();

//Loading some things...
Thread.Sleep(4000);
Но после переноса моего проекта на .Net 8 он перестал работать, как раньше. Теперь новый поток, созданный для отображения SplashScreen, зависает при инициализации диалога и продолжается только после завершения основного потока, это приводит к тому, что мой SplashScreen открывается только после завершения всей загрузки.
Пока при отладке, если я войду в «WpfSplashScreen()», я увижу, что поток останавливается на методе «InitializeComponent()».
Я не хочу менять свой SlpashScreen на другой компонент , идея здесь не в этом, я использовал один и тот же подход для открытия других диалоговых окон в их собственных потоках во многих частях моей программы по разным причинам (например, окно индикатора выполнения), и во всех случаях после миграции возникает одна и та же проблема. SplashScreen — это самый простой пример этой проблемы, который у меня есть. Поэтому мне действительно нужно знать, как сделать так, чтобы инициализация диалога Wpf не вывешивала отдельный поток в .Net 8.
Есть идеи?

Подробнее здесь: https://stackoverflow.com/questions/782 ... d-in-net-8

Вернуться в «C#»