C# WindowsMediaPlayer(WMPLib)音频突然消失
我正在尝试在winforms应用程序中播放音频。为此,我使用以下方法:C# WindowsMediaPlayer(WMPLib)音频突然消失,c#,winforms,audio,process,timer,C#,Winforms,Audio,Process,Timer,我正在尝试在winforms应用程序中播放音频。为此,我使用以下方法: WMPLib.WindowsMediaPlayer wplayer = new WMPLib.WindowsMediaPlayer(); string path = "C:\\Windows\\Media\\Ring10.wav"; wplayer.URL = path; wplayer.controls.play(); 我使用Wind
WMPLib.WindowsMediaPlayer wplayer = new WMPLib.WindowsMediaPlayer();
string path = "C:\\Windows\\Media\\Ring10.wav";
wplayer.URL = path;
wplayer.controls.play();
我使用WindowsMediaPlayer类是因为其他类不会以我的音频文件的格式播放音频。上面的代码在我添加Process.GetProcesses()之前一直有效
或Process.getProcessByName…
到计时器的勾号事件
private void timer1_Tick(object sender, EventArgs e)
{
Process[] processes = Process.GetProcesses();
}
计时器第一次计时并执行Process.GetProcesses()代码>,音频将继续播放。但是,计时器第二次滴答声时,音频停止。如果计时器与播放音频的计时器形式相同或不同,则会发生这种情况。我不知道为什么会这样。导致此问题的原因是什么?请稍候
WMPLib.WindowsMediaPlayer wplayer = new WMPLib.WindowsMediaPlayer();
string path = "C:\\Windows\\Media\\Ring10.wav";
wplayer.URL = path;
wplayer.controls.play();
您是否在某处保留对wplayer的引用?像是你表格上的私人字段
如果没有,我想垃圾收集器会随机地把它捡起来并杀死它。获取一个进程列表会产生足够多的临时垃圾,GC会介入,这可能只是巧合
试着把它改成一个
private WMPLib.WindowsMediaPlayer wplayer = new WMPLib.WindowsMediaPlayer();
[编辑:如果您还有任何问题,请尝试下面的最小示例-这应该可以正常工作:
public partial class Form1 : Form
{
Timer timer = new Timer();
private WMPLib.WindowsMediaPlayer wplayer = new WMPLib.WindowsMediaPlayer();
public Form1()
{
InitializeComponent();
string path = "C:\\Users\\Public\\Music\\Sample Music\\Kalimba.mp3";
wplayer.URL = path;
wplayer.controls.play();
timer.Interval = 2000;
timer.Tick += timer_Tick;
timer.Start();
}
void timer_Tick(object sender, EventArgs e)
{
Process[] processes = Process.GetProcesses();
Debug.WriteLine(processes.Length + " running processes");
}
}
等一下
WMPLib.WindowsMediaPlayer wplayer = new WMPLib.WindowsMediaPlayer();
string path = "C:\\Windows\\Media\\Ring10.wav";
wplayer.URL = path;
wplayer.controls.play();
您是否在某处保留对wplayer的引用?例如在表单上作为私有字段
如果没有,我认为垃圾收集器会随机地把它捡起来并杀死它。这可能只是巧合,因为获取一个进程列表会产生足够的临时垃圾,GC会将其处理掉
试着把它改成一个
private WMPLib.WindowsMediaPlayer wplayer = new WMPLib.WindowsMediaPlayer();
[编辑:如果您还有任何问题,请尝试下面的最小示例-这应该可以正常工作:
public partial class Form1 : Form
{
Timer timer = new Timer();
private WMPLib.WindowsMediaPlayer wplayer = new WMPLib.WindowsMediaPlayer();
public Form1()
{
InitializeComponent();
string path = "C:\\Users\\Public\\Music\\Sample Music\\Kalimba.mp3";
wplayer.URL = path;
wplayer.controls.play();
timer.Interval = 2000;
timer.Tick += timer_Tick;
timer.Start();
}
void timer_Tick(object sender, EventArgs e)
{
Process[] processes = Process.GetProcesses();
Debug.WriteLine(processes.Length + " running processes");
}
}