0

我正在尝试为 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 timer3timer4以正确的方式正常工作并调暗按钮。

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

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

4

3 回答 3

1

您可以使用 AutoResetEvent.WaitOne(int) 而不是使用计时器。我指的是 AutoResetEvent.WaitOne() 方法的这种重载 - http://msdn.microsoft.com/en-us/library/cc189907.aspx。如果您从不提供 Set() 事件,则计时器将用完并执行下一行代码。

于 2013-08-25T21:20:49.663 回答
1

您可以使用计时器来实现这一点。但 IMO 最好的解决方案async/awaitTask.delay.

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

更改您的方法签名如下

async void IniziaGioco()
于 2013-08-25T21:30:23.917 回答
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);
于 2013-08-25T21:30:39.767 回答