如何在C#Windows窗体中后台运行进程时播放mp3
本文关键字:进程 运行 播放 mp3 后台 C#Windows 窗体 | 更新日期: 2023-09-27 18:27:40
我正在尝试一个寡妇窗体应用程序,该应用程序运行一个实时将C++exe的输出重定向到C#应用程序的进程。重定向后的C++输出随后用于触发多个任务。例如:如果重定向输出等于"playSong",它应该播放mp3文件。C++输出重定向运行良好,因为我已经用它来触发其他任务,如打开和关闭窗体窗口,但仅用于播放mp3,它不起作用,之后的代码似乎也起作用。(如果这对问题很重要的话,我还在C++程序中使用openCV)然而,我尝试在不使用任何进程的情况下在不同的项目中播放mp3,在那里mp3播放得很好。如果有人能帮我,那就太好了,下面是我的尝试。
using System.Diagnostics;
using System.Runtime.InteropServices;
public partial class frmPlayList : Form
{
[DllImport("winmm.dll")]
private static extern long mciSendString(string strCommand, StringBuilder strReturn, int iReturnLength, IntPtr hwndCallback);
public bool flag = true;
static string varr2;
public frmPlayList()
{
InitializeComponent();
}
private void frmPlayList_Load(object sender, EventArgs e)
{
Program.getProcess().OutputDataReceived += processOutputDataReceived2;
}
public void processOutputDataReceived(object sender, DataReceivedEventArgs e)
{
Console.WriteLine(e.Data);
varr2 = e.Data;
if (varr2 == "playSong" && flag)
{
playSong();
flag = false;
}
}
public delegate void UpdateControlsDelegate();
public void playSong() //Playing song
{
InvokeUpdateControlsForPlaySong();
}
public void InvokeUpdateControlsForPlaySong()
{
if (this.InvokeRequired)
{
this.BeginInvoke(new UpdateControlsDelegate(UpdateControlsForPlaySong));
}
else
{
UpdateControlsForPlaySong();
}
}
private void UpdateControlsForPlaySong()
{
string f = @"path'a.mp3";
mciSendString("open '"" + f + "'" type mpegvideo alias MediaFile", null, 0, IntPtr.Zero);
mciSendString("play MediaFile", null, 0, IntPtr.Zero);
Console.WriteLine("Song ended!");
}
}
为什么不使用媒体播放器??藏起来!!