WaveOutEvent is what you should be using if you don't want audio on the GUI thread. I fairly recently added some code in to handle removing USB audio devices so make sure you are working with the very latest NAudio (I have some preview builds on nuget)