我正在C#WPF中制作一个mp3播放器,但无法通过资源管理器打开多个文件。事实是,当您通过资源管理器上下文菜单打开多个文件时,每首歌曲都在一个单独的程序中打开,我希望如果播放器已经打开,那么当您重新打开该应用程序时,新的歌曲将被传输到打开的应用程序中,没有玩过新游戏,该如何实施?
(对不起,我的英语不好)
private void Application_Startup(object sender, StartupEventArgs e)
{
if (e.Args.Length != 0)
{
var path = e.Args[0];
Player.PlaySong(new Song(path));
// ...
}
}
答案 0 :(得分:0)
沉思一段时间后,我设法通过TcpListener和TcpClient达成解决方案。
这是代码,如果有人派上用场(检查应用程序的打开副本,数据传输等可以更改,这种方法对我有用)。
启动:
Process[] processes = Process.GetProcessesByName("ProcessName");
if (processes.Length > 1)
{
TcpClient client = new TcpClient();
client.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 12000));
StreamWriter sw = new StreamWriter(client.GetStream());
sw.AutoFlush = true;
sw.WriteLine($"addsong:{path}");
client.Close();
Process.GetCurrentProcess().Kill();
}
else
{
var thread = new Thread(ListenerCallback);
thread.Start();
}
Tcp侦听器线程:
private void ListenerCallback()
{
TcpListener listner = new TcpListener(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 12000));
listner.Start();
while (true)
{
TcpClient client = listner.AcceptTcpClient();
StreamReader sr = new StreamReader(client.GetStream());
MessageBox.Show($"Recieved data: {sr.ReadLine()}");
client.Close();
Thread.Sleep(500);
}
}