Асинхронность (не многопоточность) в КП/ББ реализуется через объекты Services.Action. Но для этого надо делить на отдельные части каждую активность.

Т.е. read_file_to_memory и play_music должны быть реализованы в неблокирующем стиле (begin_read_file_to_memory...). Кстати, Windows поддерживает асинхронное чтение файла. А DirectShow (если вы используете его) - асинхронное воспроизведение.