2014-12-07 12 views
1

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

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

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

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

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

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]); 
     } 

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

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

ответ

1

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

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

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

enter image description here

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

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

эти две линии, создавая из MatLab, например, в code.Now давайте сделаем простой расчет на Matlab.

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

Позволяет дать решение вашей фактической problem.You хочет выполнить Matlab GUI program.And Я думаю, что ваш Gui записывают некоторые данные в CSV file.Then ваших C# программных процессы, которые data.You следует отметить, что вы может вызвать ваш графический интерфейс в 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(); 

я продлил пример на этой странице: Source

+0

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

+0

Вам не нужно помещать любые файлы matlab в вашу папку отладки. Все они должны быть в текущей папке Matlab. Если он не работает, возможно, ваши m-файлы gui не находятся в текущей папке Matlabs. –

Смежные вопросы