Запуск Matlab GUI из C #

1

В моем проекте я интегрирую приложение Matlab GUI в приложение С#.

Решением, о котором я думал, является создание автономного приложения из графического интерфейса Matlab и запуск его с помощью кнопки на С#:

Process exeProcess = Process.Start("Data_Capture_Direct_call.exe");
        if(!exeProcess.HasExited)
        {
            exeProcess.WaitForExit();
        }
        exeProcess.Close();

Проблема в том, что после того, как экран заставки Matlab GUI закрыт и до открытия реальной программы С# обнаруживает, что программа уже закрыта и продолжается до следующей строки.

Кроме того, следующие несколько строк кода выполняются неправильно:

List<String> Movement = new List<String>();
        List<String> Repetition = new List<String>();
        List<String> Duration = new List<String>();
        using (CsvFileReader reader = new CsvFileReader("capture.csv"))
        {
            CsvRow row = new CsvRow();
            while (reader.ReadRow(row))
            {
                Movement.Add(row[0]);
                Repetition.Add(row[1]);
                Duration.Add(row[2]);
            }
        }
        for (int i = 1; i < Movement.Count; i++)
        {
            dataGridView1.Rows.Add(i, Movement[i], Repetition[i], Duration[i]);
        }   

Случается, что после того, как С# ошибочно обнаруживает закрытие процесса, файл capture.csv становится пустым и данные не загружаются в сетку данных.

Пожалуйста, дайте мне знать, где я делаю ошибку, или если есть лучший способ сделать это!

Теги:
user-interface
integration

1 ответ

1
Лучший ответ

В моем решении вы должны сделать некоторые настройки перед запуском кода, чтобы использовать экземпляр Matlab в приложении С#.

Добавление необходимой dll: сначала мы добавим ссылку dll со COM-интерфейсом. Нажмите RMB на проекте и выберите опцию [Добавить ссылку]. В новом окне нажмите вкладку COM. В текстовом поле поиска напишите "Matlab". Затем выберите "Matlab Application (версия 7.10)" Библиотека типов ".

Вы должны получить ссылки, как показано ниже:

Изображение 174551

Теперь вы можете легко делать все, что вы можете сделать на Matlab в С#. Давайте дадим основной пример:

        var acCtx = Type.GetTypeFromProgID("matlab.application.single"); 
        var matlab = (MLApp.MLApp)Activator.CreateInstance(acCtx);

эти две строки создают экземпляр matlab в коде. Теперь давайте легко вычислить Matlab.

       Console.WriteLine(matlab.Execute("1+2")); // This will output 3 on console.
       matlab.Quit(); // you should close matlab in order to clean memory

Давайте дадим решение вашей фактической проблемы. Вы хотите выполнить программу Matlab GUI. И я думаю, что ваш Gui записывает некоторые данные в CSV файл. Затем ваша программа на С# обрабатывает эти данные. Вы должны заметить, что вы можете называть свой графический интерфейс в Matlab просто написав свое имя программы как команду. Предположим, что у вас есть GUI с именем myGui.m.Вы можете вызвать этот gui, вызвав myGui в командной строке, так как вы можете написать 1 + 2, чтобы получить 3.

Позвоните по телефону gui.

matlab.Execute("myGui"); // This will execute your Gui. You can use buttons to save data to CSV file
  matlab.Quit();

Я привел пример на этой странице: Источник

  • 0
    Спасибо за полный ответ. Мне гораздо проще просто вызвать мой графический интерфейс Matlab, так как это сложный графический интерфейс, и для преобразования всех требуется много усилий. Однако проблема заключается в том, что после того, как я поместил мои файлы GUI (.m .fig) в папку отладки и запустил, как вы упомянули, Matlab откроется на панели задач (без окна) и закроется через несколько секунд.
  • 0
    Вам не нужно помещать файлы Matlab в вашу папку отладки. Все они должны быть в текущей папке Matlab. Если это не работает, возможно, ваши m файлов графического интерфейса не находятся в текущей папке Matlabs.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню