/// <summary>
///本类直接调用多线程无效 TopQueue.MucicPlayConcurrentQueue.Enqueue(声音序号); 声音放在debug下 FrmLogin 窗体下有出队列操作
/// </summary>
public class MusicPlaybackConsumer
{
private static string MUSIC_PATH = "music/";
private static void Play(string fileName)
{
var a = mciSendString("close all", "", 0, 0);
var b = mciSendString("open " + fileName + " alias media", "", 0, 0);
var c = mciSendString("play media", "", 0, 0);
}
/// <summary>
/// 暂停
/// </summary>
private void Pause()
{
mciSendString("pause media", "", 0, 0);
}
/// <summary>
/// 停止
/// </summary>
private void Stop()
{
mciSendString("close media", "", 0, 0);
}
/// <summary>
/// API函数 DLL win自带不需要放入debug
/// </summary>
[DllImport("winmm.dll", EntryPoint = "mciSendString", CharSet = CharSet.Auto)]
private static extern int mciSendString(
string lpstrCommand,
string lpstrReturnString,
int uReturnLength,
int hwndCallback
);
/// <param name="musicPlaybackType"></param>
/// <returns></returns>
public static ResultInfo<string> MusicPlayback(int musicPlaybackType)
{
ResultInfo<string> result = new ResultInfo<string>();
try
{
string fileName = "";
switch (musicPlaybackType)
{
case 1://
fileName = "a.mp3";
break;
case 2://
fileName = "fffff.mp3";
break;
case 3:/
fileName = "ssss.mp3";
break;
case 4://
fileName = "dddd.mp3";
break;
case 5://
fileName = "xxxxx.mp3";
break;
default:
result.Message = $"未知编号{musicPlaybackType}";
return result;
}
Play(MUSIC_PATH + fileName);
result.IsSuccess = true;
result.Message = "播放成功";
return result;
}
catch (Exception ex)
{
result.Message = $"播放异常{ex.Message}";
return result;
}
}
找个窗体线程下 或者 控制线程下
Task.Factory.StartNew(() =>
{
Logger.Info("开启播放消息");
while (true)
{
if (TopQueue.MucicPlayConcurrentQueue.TryDequeue(out int palyNumber))
{
Invoke(new Action(() => { MusicPlaybackConsumer.MusicPlayback(palyNumber); }));
}
Thread.Sleep(500);
}
});
public class TopQueue
{
public static ConcurrentQueue<int> MucicPlayConcurrentQueue = new ConcurrentQueue<int>();
}
TopQueue.MucicPlayConcurrentQueue.Enqueue(4);