Я работаю над базовым аудиоплеером и хочу обновить некоторые элементы графического интерфейса в зависимости от прохождения песни.
Рядом с моей формой я использую класс AudioPlayer, который содержит ссылку на созданную форму.
В функции playAudio я хочу запустить таймер, который должен вызвать updateCurrTime, когда истечет время.(Для справки: я использую NAudio )
Функция, вызывающая таймер:
public bool playAudio()
{
if (waveOutDevice.PlaybackState == PlaybackState.Playing)
{
waveOutDevice.Pause();
timer.Enabled = false;
return false;
}
else if(waveOutDevice.PlaybackState == PlaybackState.Paused)
{
waveOutDevice.Play();
timer.Enabled = true;
return true;
}
else if(waveOutDevice.PlaybackState == PlaybackState.Stopped)
{
initPlayer(mu_path);
waveOutDevice.Play();
timer.Enabled = true;
return true;
}
return false;
}
И функция для обновления моей формы:
public void updateCurrTime()
{
while (waveOutDevice.PlaybackState == PlaybackState.Playing)
{
form1_ref.curr_time = (int)audioFileReader.CurrentTime.TotalSeconds;
}
}
Я определил таймер так:
timer = new Timer();
timer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
timer.Interval = 100;
}
и OnTimedEvent так:
private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
self_ref.updateCurrTime();
}
Я использую структуру getter / setter для текста метки:
public int curr_time
{
get { return Convert.ToInt32(this.l_t_curr.Text); }
set { this.l_t_curr.Text = value.ToString() + "s"; }
}
Моя проблема в том, что я получаю сообщение об ошибке, потому что форма создается в другом потоке.Я сделал свое исследование, но я не понял, как реализовать BackGroundWorker или другие решения в моем случае.