2015-02-12 2 views
0

Я пытаюсь реализовать задержку в 1200 миллисекунд после воспроизведения звука в телефоне Windows, но задержка не работает.Задержка в телефоне Windows 8.1

Я использую следующий код:

bleep.Play(); // play bleep 
System.Threading.Tasks.Task.Delay(1100).Wait(); 
this.Frame.Navigate(typeof(MainPage.ItemPage)); 

Я посоветовал не использовать System.Threading.

Функция ожидания должна быть асинхронной, и это вызывает у меня головные боли при попытке реализовать.

Любые идеи, что еще я мог бы использовать?

ответ

5

Вы должны использовать ключевое слово await, чтобы дождаться завершения задачи; Wait() следует использовать редко и с особой осторожностью, потому что это может привести к тому, что ваше приложение окажется невосприимчивым или даже приведет к блокировкам.

// 'async' keyword is important! 
async Task foo() 
{ 
    bleep.Play(); // play bleep 
    await System.Threading.Tasks.Task.Delay(1100); 
    this.Frame.Navigate(typeof(MainPage.ItemPage)); 
} 
+2

Я бы посоветовал использовать * async Task * вместо * async void *, если это не событие * fire-forget *. – Romasz

+0

@Romasz: Хорошая точка. Я предположил, что огонь и забыл, так как он приводит к навигации, но я все равно изменил на «Задачу» –

+0

«Никогда не использовать' Wait() ', кажется мне слишком сильным. Избегайте использовать его и настоятельно предпочитайте, как я говорю, асинхронный/ждущий. Вам действительно нужно быть более осторожным с 'Wait()', но иногда это действительно полезно/необходимо. – yasen

2

Если вы хотите synchronous задержку, то вы можете попробовать:

 Thread.Sleep(1200); 
     MessageBox.Show("1.2 sec delayed"); 

и в случае asynchronous задержки, вы можете использовать:

 Task t = new Task(() => { Thread.Sleep(1200); }); 
     t.Start(); 
     MessageBox.Show("1.2 sec delayed"); 

ПРИМЕЧАНИЕ: Не забудьте добавить следующие namespaces:

using System.Threading.Tasks; // for Task class 
using System.Threading; // for Thread class 
+0

Извините, но это неправильно. Во-первых, 'Thread.Sleep()' даже не существует в переносном подмножестве. И ваш второй пример не сработает. –

+0

Я протестировал его на Windows 8 setup setup, кстати, я не получил «Portable subset»? – Dev

+0

@ Thomas Weller вы правы Thomas Thread.Sleep() не работает в Windows 8.1. Я тоже пробовал, но не работал. – Sophman

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