0

我真正想做的是,我想计算发生了多少次滴答事件。实际上我想检查一下这个事件是否发生了 5 次。然后应该显示消息框。这是我的代码:

public partial class MainWindow : Window
{
    int i = 0;
    int points = 0;
    int counter = 0;

    public MainWindow()
    {            
      System.Windows.Threading.DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
      dispatcherTimer.Tick += new EventHandler(this.playMyAudioFile);

      TimeSpan ts = dispatcherTimer.Interval = new TimeSpan(0, 0, 2);

      dispatcherTimer.Start();
      if (counter == 5)
      {
        dispatcherTimer.Stop();            
      }

      InitializeComponent();
    }

    private void textBox1_TextChanged(object sender, TextChangedEventArgs e)
    {
        // some code    
        label1.Content = points;
        }
    }

    private void playMyAudioFile(object sender, EventArgs e)
    {
        Random rd = new Random();            
        i = rd.Next(1, 26);            
        mediaElement1.Source = new Uri(@"D:\Project C#\A-Z\" + i + ".mp3");
        mediaElement1.Play();
    }
}
4

2 回答 2

1

使用await,而不是计时器,使这个特定的任务更容易:

public static async Task makeMusic(TimeSpan timespan)
{
    for (int i = 0; i < 5; i++)
    {
        //this assumes you can remove the parameters from this method
        playMyAudioFile(); 
        await Task.Delay(timespan);
    }

    MessageBox.Show("All done!");
}

如果需要可配置,您可以将 count 作为参数,如果timespan不需要更改,则将其删除。

于 2013-11-11T20:40:19.867 回答
0

Servy 的解决方案比使用计时器要干净得多。但是,如果您坚持使用计时器,我建议您这样做:

private int counter = 0;
private Random rd = new Random();
private void playMyAudioFile(object sender, EventArgs e)
{
    i = rd.Next(1, 26);            
    mediaElement1.Source = new Uri(@"D:\Project C#\A-Z\" + i + ".mp3");
    mediaElement1.Play();
    ++counter;
    if (counter == 5)
    {
        dispatcherTimer.Stop();
    }
}

认为sender是调度程序计时器,因此您可以编写:

var timer = (DispatcherTimer)sender;
timer.Stop();

并且,请替换这个:

TimeSpan ts = dispatcherTimer.Interval = new TimeSpan(0, 0, 2);

和:

TimeSpan ts = dispatcherTimer.Interval = TimeSpan.FromSeconds(2);

当我看到 时new TimeSpan(0, 0, 2),我必须考虑这意味着什么。是分、秒还是毫秒?天、小时和分钟?时、分、秒?

TimeSpan.FromSeconds(2),但是,是明确的。绝对没有歧义。

于 2013-11-11T21:54:09.673 回答