2013-11-11 2 views
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(); 
    } 
} 
+0

У вас есть дополнительный '}' в обработчике событий textBox1_TextChanged. – paqogomez

+2

В несвязанной заметке вы не используете 'Random()' правильно. Вы каждый раз инициализируете псевдослучайную генерацию, прежде чем вы назовете «Next» на ней, что приведет к тому, что последовательность генерируемых случайных чисел не будет очень случайной. –

ответ

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!"); 
} 

Вы можете сделать подсчет параметр, если он должен быть настраиваемым, или удалите timespan в качестве параметра, если он никогда не изменится.

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), тем не менее, является явным. Нет абсолютно никакой двусмысленности.

Смежные вопросы