【发布时间】:2016-12-24 08:45:25
【问题描述】:
我正在创建一个应用程序,它有一个充满自定义对象的9x9 多维数组,当按下按钮时,需要播放每个对象特定的声音。
我运行这个方法来加载声音,运行没有已知问题:
public void setSoundToPlay()
{
OpenFileDialog openFileDiag = new OpenFileDialog();
if ((bool)openFileDiag.ShowDialog())
{
audio = new MediaPlayer();
audio.Open(new System.Uri(openFileDiag.FileName));
}
}
但是当我激活另一种播放声音的方法时:
public void buttonActivated()
{
audio.Play();
}
我收到了System.InvalidOperationException:{"The calling thread cannot access this object because a different thread owns it."}
运行媒体播放器对象的对象嵌套在另一个对象中,这就是问题所在。我尝试理解线程,但没有取得进展。
在某些情况下,我还需要让所有声音都能同时播放。这是最适合这项工作的对象吗?
【问题讨论】:
-
setSoundToPlay 在哪里被调用?基本上你正在尝试从 UI 线程调用 audio.Play 但音频由另一个线程拥有
标签: c# wpf multithreading error-handling