2015-02-12 118 views
0

我试图在windows phone中播放声音后实现1200毫秒的延迟,但延迟不起作用。Windows Phone 8.1中的延迟

我使用下面的代码:

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

,我被告知不能使用的System.Threading。

await函数需要是异步的,它在尝试实现时会引起一些头痛的问题。

任何想法我可以使用什么?

回答

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 2015-02-12 06:27:43

+0

@Romasz:好点。因为它导致了导航,所以我认为它是导火索,但无论如何我改变了“任务” – 2015-02-12 06:41:29

+0

“永远不要使用Wait()'”似乎对我来说太强大了。避免使用它,并强烈喜欢异步/等待是我会说。你真的需要更加小心'Wait()',但有时它真的很有用/必要。 – yasen 2015-02-12 10:15:49

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()'甚至不存在于Portable子集中。无论如何,你的第二个例子无法工作。 – 2015-02-12 05:55:38

+0

我已经在windows phone 8开发环境中测试过它,顺便说一句,我没有得到“便携子集”? – Dev 2015-02-12 06:09:04

+0

@ Thomas Weller你是正确的Thomas Thread.Sleep()在Windows 8.1中不起作用。我已经尝试过,并没有工作。 – Sophman 2015-02-13 00:56:05