В моем приложении wpf я знаю, что должен обновлять элементы пользовательского интерфейса в основном потоке. Я использую диспетчер главного окна, чтобы сделать это. Я просто интересуюсь, почему этот код не работает:Почему внутренняя задача не выполняется?
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.Loaded += MainWindow_Loaded;
}
void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
Task.Factory.StartNew(() =>
{
Console.Write("test");
Task.Factory.StartNew(() =>
{
// why does this code does not execute!! ???
Thread.Sleep(1000);
txt.Text = "Testing";
}, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.FromCurrentSynchronizationContext());
});
}
}
Почему внутренняя задача не выполняется? Другими словами, моя программа никогда не достигает линии Thread.Sleep(1000);
Почему это?
Вы уверены, что не выполнили? Проблема может быть здесь 'txt.Text =« Тестирование »;' это не будет работать, поскольку вы не находитесь в потоке пользовательского интерфейса. Замените его записью или сделайте точку останова, чтобы проверить – thumbmunkeys
Я никогда не попадал в точку останова. Да, я уверен, что она не выполняется. Я просто задаю этот вопрос, чтобы узнать больше о задачах ... –
Возможный дубликат [обновить интерфейс в Task с помощью TaskScheduler.FromCurrentSynchronizationContext] (http://stackoverflow.com/questions/17418208/update-ui-in-task-using -taskscheduler-fromcurrentsynchronizationcontext) – thumbmunkeys