2012-03-12 2 views
0

C# exe의 출력을 실시간으로 C# 응용 프로그램으로 리디렉션하는 프로세스를 실행하는 widows 양식 응용 프로그램을 사용하고 있습니다. 리디렉션 된 C++ 출력은 여러 작업을 트리거하는 데 사용됩니다. 예를 들어 : 리디렉션 된 출력이 "playSong"과 같으면 mp3 파일을 재생해야합니다. C++ 출력 리디렉션은 양식 창을 열고 닫는 것과 같은 다른 작업을 트리거하는 데 이미 사용했지만 mp3를 재생할 때만 작동하며 그 이후의 코드도 제대로 작동하는 것처럼 잘 작동합니다. (또한 문제가 중요하다면 C++ 프로그램에서 openCV를 사용합니다.) 그러나 어떤 프로세스를 사용하지 않고 다른 프로젝트에서 mp3를 재생하려고 시도했지만 mp3가 정상적으로 재생됩니다. 아무도 이걸 가지고 나를 도울 수 있다면 좋을 것입니다.C# Windows Form의 백그라운드에서 프로세스를 실행하는 동안 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!"); 
    } 
} 
+0

나는 당신의 질문에 대답 할 수 없지만 당신의 장소에서 나는 다른 방법을 사용하여 mp3 파일을 재생 해보려고합니다. 어쩌면 winmm과 mciSendString이 C++과 C# 연결을 방해하고 있습니다. 또한 두 개의 프로세스를 병렬로 실행하는 대신 C# 프로그램에서 C++ 코드를 사용하는 것을 고려 했습니까? –

+0

NAudio 라이브러리를 사용해보십시오.이 파일은 오디오 파일과 함께 사용하기 쉽고 – Anton

답변

0

왜 미디어 플레이어를 사용하지 않습니까 ?? 그냥 숨기세요 !!

+0

예, 저는 wmplib로 windows 미디어 플레이어를 사용했습니다. 도와 주셔서 감사합니다 – Anshu

관련 문제