Как открыть несколько файлов в одном окне - PullRequest
0 голосов
/ 02 мая 2019

Я делаю mp3-плеер в C # WPF и у меня возникают проблемы с открытием нескольких файлов через проводник. Дело в том, что когда вы открываете несколько файлов через контекстное меню Проводника, каждая песня открывается в отдельной программе, я хочу, чтобы, если проигрыватель уже открыт, при повторном открытии приложения новая песня переносилась в открытое приложение, и не воспроизводится в новом, как это можно реализовать?

(извините за мой плохой английский)

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 голосов
/ 02 мая 2019

После некоторого времени медитации мне удалось найти решение с помощью 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 Listener:

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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...