如何在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!");
    }
}

如何在C#Windows窗体中后台运行进程时播放mp3

为什么不使用媒体播放器??藏起来!!