C# 如何使程序在两个定时操作之间等待

C# 如何使程序在两个定时操作之间等待,c#,windows-phone-8,C#,Windows Phone 8,我正在尝试为WindowsPhone8开发一个简单的SimonSays应用程序 为了让序列对用户可见,我使用了一个数组(tasti)填充键索引,并使用一个循环检查数组并使按钮变暗 我写了这段代码: int livello = 1; double opac = 0.3; void IniziaGioco() { DispatcherTimer timer5 = new DispatcherTimer(); timer5.Interval

我正在尝试为WindowsPhone8开发一个简单的SimonSays应用程序

为了让序列对用户可见,我使用了一个数组(
tasti
)填充键索引,并使用一个
循环检查数组并使按钮变暗

我写了这段代码:

   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;
            }
        }
int-livello=1;
双opac=0.3;
Iagioco()无效
{
Dispatchermer timer5=新Dispatchermer();
timer5.Interval=新的时间跨度(0,0,0,1);
timer5.Start();
for(int i=0;i
timer1
timer2
timer3
timer4
工作正常,调暗按钮的方式正确

我想使用
timer5
使我的代码在“下一步”按钮变暗之前“等待”1秒,但它不起作用,因为按钮同时变暗


计时器是最好的方法吗?如何使我的代码工作?

您可以使用AutoResetEvent.WaitOne(int)而不是使用计时器。我指的是AutoResetEvent.WaitOne()方法的重载-。如果您从未提供Set()事件时,计时器将耗尽,并执行下一行代码。

您可以使用计时器来实现这一点。但IMO的最佳解决方案是
async/wait
以及
Task.delay

for (int i = 0; i < livello; i++)
{
   // Your switch case
    await Task.Delay(1000);
}

您可以查看异步任务编程:

Qoute:Visual Basic中的Async和Await关键字以及C#中的Async和Await关键字是异步编程的核心。通过使用这两个关键字,您可以使用.NET Framework或Windows运行时中的资源创建异步方法,几乎与创建同步方法一样简单。您定义的异步方法通过使用async和await,它们被称为异步方法


似乎所有的逻辑都是相同的,但为什么要使用单独的计时器1、2、3、4?我必须如何更改Iagioco()签名?
async void IniziaGioco()
// you get somthing like this:
SuonoBottone1.Play();
await Task.Delay(1000);
SuonoBottone2.Play();
await Task.Delay(1000);
SuonoBottone3.Play();
await Task.Delay(1000);