如何在一个窗口中打开多个文件

时间:2019-05-02 09:42:52

标签: c# wpf

我正在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));
        // ...
    }
}

1 个答案:

答案 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);
    }
}