У меня возник вопрос об использовании внешней библиотеки C++ (irrKlang.dll), которая является движком воспроизведения звука. Теперь проблема заключается в том, что когда я получаю событие SoundStopped из него и выполняю действие в основной форме, возникают всевозможные ошибки, связанные с стеком. Позвольте мне показать код:IrrKlang Звуковая библиотека и стоп-потоки событий
namespace WindowsFormsApplication4
{
public class IsoundFinished : ISoundStopEventReceiver
{
public delegate void OnSoundStoppedEventHandler(object source, EventArgs e);
public event OnSoundStoppedEventHandler IStopped;
public void OnSoundStopped(ISound iSound, StopEventCause reason, object userData)
{
if (reason.ToString() == "SoundFinishedPlaying")
IStopped?.Invoke(this, EventArgs.Empty);
}
}
}
Это расширенный класс для меня, чтобы сделать пользовательские действия (например - если звук закончил, поднять событие ...) я создаю экземпляр этого, для случая действие, чтобы получить подвергаются в моем главном классе Form1:
IsoundFinished iStopReceiver = new IsoundFinished();
Теперь в моей основной форме, у меня есть эта линия в моем методе Form1(), как раз под моим InitializeComponent():
iStopReceiver.IStopped += new soundFinished.OnSoundStoppedEventHandler(OnStopped);
Это для подписка на мероприятие Лер. И, наконец, - мой метод OnStopped(), который должен делать вещи, когда песня заканчивается это воспроизведение - это на том же Form1:
private void OnStopped(object sender, EventArgs e)
{
if (InvokeRequired)
{
Invoke(new Action<object, EventArgs>(OnStopped), sender, e);
return;
}
btnStop1.PerformClick();
}
Мой метод Кнопка Stop1 является (для тех, кто работает с IrrKlang) ISound.Stop();
и несколько строк кода, связанных с отображением списка воспроизведения и так далее. Хотя я ее вызова из основного UI нить - который должен обеспечить меня с некоторой степенью защиты резьбы несоосности, все виды ошибок появляются, в основном
Cannot evaluate expression because a native frame is on the top of the call stack.
Конечно, если я делаю это без обработчика событий, ISound. Стоп(); понижает звук от двигателя, как и должно. Я знаю, что что-то не так происходит с потоками, но я не могу понять, что происходит. Если бы кто-то дал мне несколько советов, я был бы признателен за это.