В приложении WPF (C#, .NET 4.0, VS 2013), следующий код (вызывается из UI потока) замерзает UI нить в течение 1 секунды:замерзает UI темы, пока он не должен быть
new Thread(new ThreadStart(() =>
{
Dispatcher.BeginInvoke(new Action(() =>
{
Thread.Sleep(1000);
}));
})).Start();
Thread.Sleep()
является заполнителем. В фактическом коде он получит доступ к некоторому элементу пользовательского интерфейса и сделает небольшой расчет времени. Это также работает на потоке пользовательского интерфейса!
Не следует ли его запускать в другом потоке, кроме потока пользовательского интерфейса? Что я пропустил?
Вы используете диспетчер для выполнения действия в потоке пользовательского интерфейса, и он блокируется на секунду. – Samuel
Обратите внимание, что доступ к пользовательскому интерфейсу из фонового потока вызовет исключение. Обновления элементов пользовательского интерфейса должны выполняться в основном потоке, и для этого вы можете использовать Dispatcher.BeginInvoke (...). – Onots