Я пытаюсь использовать приложение формы вдов, которое выполняет процесс, который перенаправляет вывод C ++ exe в приложение C # в режиме реального времени.Перенаправленный вывод C ++ затем используется для запуска нескольких задач.Например: если перенаправленный вывод равен «playSong», он должен воспроизвести файл mp3.Перенаправление вывода C ++ работает нормально, так как я уже использовал его для запуска других задач, таких как открытие и закрытие окон формы, но только для воспроизведения mp3 он не работает, и код после этого, похоже, тоже работает.(Также я использую openCV в программе C ++, если это имеет значение для проблемы) Однако я попытался воспроизвести 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!");
}
}