Программа закрытия потока при нажатии кнопки Raspberry Pi - PullRequest
0 голосов
/ 19 марта 2020

Я понимаю, что здесь есть похожие вопросы, и я посмотрел на них, я просто не могу применить решения для моей собственной проблемы.

Я пишу MP3-плеер для Pi с использованием Visual Studio (C#) на P C, затем с помощью Mono на Pi, чтобы запустить его. Поскольку Mono, похоже, не имеет библиотеки MP3 (рад, что меня поправили), мой обходной путь - использовать интерфейс gui для управления mp3-плеером из командной строки (omxplayer). У меня есть рабочий тестовый интерфейс, который sh через Pi от моего P C для тестирования каждый раз.

Проблема в том, что когда я нажимаю кнопку Button1, чтобы запустить его, он отлично работает в том, что mp3 игры. Но как только я нажал кнопку 2, чтобы отправить приложению клавишу «p», которая должна приостановить программу, оно просто вышло. В конечном итоге у меня будет куча кнопок, посылающих нажатия клавиш для управления им, как при следующем пропущенном останове и т. Д. 1017 *. Я проверил функциональность с терминала, и он работает нормально. Любые предложения будут оценены.

Вот мой код.

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        ProcessStartInfo procStartInfo;
        System.Diagnostics.Process proc;
        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            textBox1.Text = "Button Clicked";
            procStartInfo = new ProcessStartInfo("omxplayer", "/home/pi/Music/Debug/Mutter.mp3 &");
            procStartInfo.RedirectStandardOutput = true;
            procStartInfo.UseShellExecute = false;
            procStartInfo.CreateNoWindow = true;
            proc = new System.Diagnostics.Process();
            proc.StartInfo = procStartInfo;
            proc.Start();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            SendKeys.Send("{p}");
        }
    }
}

Как я пытался объяснить в комментариях, не глобальный, но не совсем правильный. C# сделал это

    private void button1_Click(object sender, EventArgs e)
    {
        textBox1.Text = "Button Clicked";
        ProcessStartInfo procStartInfo = new ProcessStartInfo("omxplayer", "/home/pi/Music/Debug/Mutter.mp3 &");
        procStartInfo.RedirectStandardOutput = true;
        procStartInfo.UseShellExecute = false;
        procStartInfo.CreateNoWindow = true;
        System.Diagnostics.Process proc = new System.Diagnostics.Process();
        proc.StartInfo = procStartInfo;
        proc.Start();
    }

Ответы [ 2 ]

1 голос
/ 19 марта 2020

Предполагая, что omxplayer просто ожидает ввода от стандартного ввода 1 , вы должны просто иметь возможность перенаправить его (как в настоящее время делаете для стандартного вывода) и отправлять символы таким образом. Нет необходимости в SendKeys.

Например, это будет

procStartInfo.RedirectStandardInput = true;

А затем сделать паузу следует:

proc.StandardInput.Write('p');

Возможно, вам придется либо добавить Flush позвоните после этого или включите AutoFlush в потоке.


1 Я не могу попробовать это сам в настоящее время, поэтому должен основываться на предположении

0 голосов
/ 20 марта 2020

У меня нет всех ответов для вас. но написание. net решения для PI кажется более сложной задачей, чем необходимо.

Я бы придерживался простого C или C ++ и придерживался вещей, которые очень совместимы с Linux

посмотрите эту 20-летнюю библиотеку для чтения файлов MP3

libmpg123 - https://www.mpg123.de/api/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...