private void Window_Closed(object sender, EventArgs e) { if (wasapi != null) { Stop(); // バックグラウンドスレッドにjoinして、完全に止まるまで待ち合わせする。 // そうしないと、バックグラウンドスレッドによって使用中のオブジェクトが // この後のTermの呼出によって開放されてしまい問題が起きる。 while (m_playWorker.IsBusy) { System.Windows.Threading.Dispatcher.CurrentDispatcher.Invoke( System.Windows.Threading.DispatcherPriority.Background, new System.Threading.ThreadStart(delegate { })); System.Threading.Thread.Sleep(100); } wasapi.Term(); wasapi = null; } }