Я воспроизводлю аудио в C #, используя функции waveOut
с методом обратного вызова, когда сообщения отправляются обратно в дескриптор окна. Я создаю форму Windows с функцией overidden WndProc
для прослушивания сообщений MM_WOM_DONE
.
result = WaveInterop.waveOutOpen(out hWaveOut, devNumber, waveStream.WaveFormat, waveOutWindow.Handle, 0, WaveInterop.CallbackWindow);
Все это работает полностью надежно, когда я нахожусь в главном потоке GUI моего приложения. Но если фоновый поток пытается сделать это, waveOutWindow
никогда не получает ни одного из сообщений WOM_
. Сначала я подумал, что, возможно, окно не было создано должным образом, и его очередь сообщений не обслуживалась, но даже если я добавлю следующий код до waveOutOpen
, он все равно не будет работать.
waveOutWindow.Show();
Debug.Assert(waveOutWindow.IsHandleCreated, "Handle not created!");
Debug.Assert(waveOutWindow.Created, "Window not created!");
Я должен сказать, что вызов waveOutOpen
успешен, как и начальные вызовы waveOutWrite
, но я никогда не получаю свои обратные вызовы, чтобы узнать, когда ставить в очередь больше звука.
Я что-то упускаю из форм в фоновых потоках?