2013-03-30 4 views
2

У меня есть приложение WPF и у меня есть отдельные темы работы для выполнения задач, и я хотел бы иметь текущий поток идти спать что-то подобное,Как сделать дочерний поток сна без замораживания потока пользовательского интерфейса в приложении WPF?

Thread.CurrentThread.Sleep (10000)

Я вижу это на Java, но не на C#. Я знаю, что у меня есть только один поток пользовательского интерфейса, поэтому, если я использую Thread.Sleep (10000), мой поток пользовательского интерфейса будет блокироваться. Я использую async и жду от .NET 4.5.

вар слова = ждут Task.Factory.StartNew (() => { StringMgr.TextToUniqueWords (File.ReadAllText (имя файла));

// Я хочу, чтобы иметь возможность спать в этой теме для 10 секунд без замораживания UI

});

Так как же положить дочерний поток в режим сна, не замораживая поток пользовательского интерфейса в приложении WPF?

Спасибо!

+0

Почему вы хотите это сделать? вы хотите что-то вроде таймера, который срабатывает каждые 10 секунд и запрашивает другие exeucting потоки, если они все еще работают? или вы хотите подождать, пока они не будут завершены (чтобы сделать что-то другое после завершения)? Я не понимаю, почему вы хотите ждать внутри «StartNew'-call вместо простого написания последующего кода после команды' await'? –

ответ

3

Вы пробовали? Sleeping thread inside a Task won't freeze your GUI но это сделает текущий фоновый поток, чтобы перейти в спящий режим, и ваш пользовательский интерфейс будет оставаться отзывчивым всегда -

 Task.Factory.StartNew(() => 
      { 
       Thread.Sleep(5000000); // this line won't make UI freeze. 
      }); 
     Thread.Sleep(5000000); // But this will certainly do. 
+1

Единственная проблема с этим решением заключается в том, что вам не разрешено взаимодействовать с графическим интерфейсом внутри новой задачи. –

5

Поскольку вы уже используете async, вы можете просто сделать это асинхронный способ:

var words = await Task.Run(async() => 
{ 
    StringMgr.TextToUniqueWords(File.ReadAllText(filename)); 
    await Task.Delay(TimeSpan.FromSeconds(10)); 
}); 

Тем не менее, я подозреваю, что сон - неправильное решение для реальной проблемы, которую вы пытаетесь решить. Если вы хотите опубликовать другой вопрос с вашей реальной проблемой, вы можете найти лучшее решение.

Смежные вопросы

 Смежные вопросы