gpt4 book ai didi

c# - WindowsMediaPlayer (WMPLib) 音频突然消失

转载 作者:太空宇宙 更新时间:2023-11-03 21:44:36 25 4
gpt4 key购买 nike

我正在尝试在我的 winforms 应用程序中播放音频。为此,我使用了这个:

           WMPLib.WindowsMediaPlayer wplayer = new WMPLib.WindowsMediaPlayer();
string path = "C:\\Windows\\Media\\Ring10.wav";
wplayer.URL = path;
wplayer.controls.play();

我使用 WindowsMediaPlayer 类,因为其他类不会以我的音频文件所采用的格式播放音频。上面的代码一直有效,直到我添加 Process.GetProcesses();Process .GetProcessesByName... 到计时器的滴答事件。

    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 的引用?就像您表单上的私有(private)字段一样?

如果没有,我想垃圾收集器会随机捡起并杀死它。获取进程列表会生成足够多的临时垃圾以供 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");
}


}

关于c# - WindowsMediaPlayer (WMPLib) 音频突然消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17689830/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com