我有一个WPF Caliburn.Micro应用程序,我使用MediaPlayer类来播放音频。我实现了播放,停止和暂停功能,但我没有在MediaPlayer中看到Resume(暂停后)的方法。你能帮帮我吗?
以下是我的一些代码:
public void Play()
{
try
{
var audio = Tpv.GetAudio(SelectedTpv.TpvId);
var file = Path.GetTempFileName().Replace(".tmp", ".wma");
File.WriteAllBytes(file, audio);
Player.Open(new Uri(file, UriKind.Absolute));
Player.Play();
IsPlaying = true;
}
catch (Exception ex)
{
MessageBox.Show(String.Format("Failed to play audio:\n{0}", ex.Message), "Failure",
MessageBoxButton.OK, MessageBoxImage.Error);
Console.WriteLine(ex.Message);
}
}
感谢。
答案 0 :(得分:1)
我很确定Play
也应该处理恢复功能。根据{{3}}的MSDN,Play
方法应该是“从当前位置播放媒体”。这意味着当您从头开始播放媒体时,位置为0.如果您暂停,则媒体将暂停在某个位置。再次按下播放应从您暂停媒体的相同位置恢复播放。
修改强>
根据您提供的代码更新,您的问题似乎是每次单击播放时都要加载文件。这将导致任何先前的暂停信息被删除,并且每次都将该文件视为全新的。您应该在那里进行某种检查,以确定如果文件尚未加载,则加载它。否则,您的Play
方法只需致电Player.Play()
即可恢复。
我还要注意,当您切换所选项目时,还需要拨打Player.Close
。这将使Play
方法知道它需要加载不同的文件。
public void Play()
{
try
{
// Check if the player already has a file loaded, otherwise load it.
if(Player.Source == null) {
var audio = Tpv.GetAudio(SelectedTpv.TpvId);
var file = Path.GetTempFileName().Replace(".tmp", ".wma");
File.WriteAllBytes(file, audio);
Player.Open(new Uri(file, UriKind.Absolute));
}
Player.Play();
IsPlaying = true;
}
catch (Exception ex)
{
MessageBox.Show(String.Format("Failed to play audio:\n{0}", ex.Message), "Failure",
MessageBoxButton.OK, MessageBoxImage.Error);
Console.WriteLine(ex.Message);
}
}