我正在尝试为Windows Phone 8开发一个简单的SimonSays应用程序。
为了使序列对用户可见,我使用的是一个填充了键索引的数组(tasti
),以及一个检查数组并使按钮变暗的for
循环。
我写了这段代码:
int livello = 1;
double opac = 0.3;
void IniziaGioco()
{
DispatcherTimer timer5 = new DispatcherTimer();
timer5.Interval = new TimeSpan(0, 0, 0, 1);
timer5.Start();
for (int i = 0; i < livello; i++)
{
switch (tasti[i])
{
case 1:
DispatcherTimer timer = new DispatcherTimer();
timer.Interval = new TimeSpan(0, 0, 0, 0, 300);
timer.Tick += new EventHandler(DiventaOpaco1);
Button1.Opacity = opac;
SuonoBottone1.Play();
timer.Start();
timer5.Start();
break;
case 2:
DispatcherTimer timer2 = new DispatcherTimer();
timer2.Interval = new TimeSpan(0, 0, 0, 0, 300);
timer2.Tick += new EventHandler(DiventaOpaco2);
Button2.Opacity = opac;
SuonoBottone2.Play();
timer2.Start();
timer5.Start();
break;
case 3:
DispatcherTimer timer3 = new DispatcherTimer();
timer3.Interval = new TimeSpan(0, 0, 0, 0, 300);
timer3.Tick += new EventHandler(DiventaOpaco3);
Button3.Opacity = opac;
SuonoBottone3.Play();
timer3.Start();
timer5.Start();
break;
case 4:
DispatcherTimer timer4 = new DispatcherTimer();
timer4.Interval = new TimeSpan(0, 0, 0, 0, 300);
timer4.Tick += new EventHandler(DiventaOpaco4);
Button4.Opacity = opac;
SuonoBottone4.Play();
timer4.Start();
timer5.Start();
break;
}
}
timer1
timer2
timer3
和timer4
正常工作,并以正确方式调暗按钮。
我想使用timer5
以使我的代码“等待”1秒钟,然后调暗下一个按钮,但它不起作用,因为按钮同时变暗。
计时器是最好的方法吗?如何使我的代码工作?
答案 0 :(得分:1)
您可以使用AutoResetEvent.WaitOne(int)而不是使用计时器。我引用AutoResetEvent.WaitOne()方法的这个重载 - http://msdn.microsoft.com/en-us/library/cc189907.aspx。如果您从未提供Set()事件,则计时器将用完并执行下一行代码。
答案 1 :(得分:1)
您可以使用计时器来实现此目的。但IMO最佳解决方案是async/await
以及Task.delay
。
for (int i = 0; i < livello; i++)
{
// Your switch case
await Task.Delay(1000);
}
按如下方式更改方法签名
async void IniziaGioco()
答案 2 :(得分:0)
您可以查看异步任务编程: http://msdn.microsoft.com/en-us/library/vstudio/hh191443.aspx
Qoute: Visual Basic中的Async和Await关键字以及C#中的async和await关键字是异步编程的核心。通过使用这两个关键字,您可以使用.NET Framework或Windows运行时中的资源创建异步方法,就像创建同步方法一样简单。使用async和await定义的异步方法称为异步方法。
// you get somthing like this:
SuonoBottone1.Play();
await Task.Delay(1000);
SuonoBottone2.Play();
await Task.Delay(1000);
SuonoBottone3.Play();
await Task.Delay(1000);