В моем проекте я интегрирую приложение 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 становится пустым и данные не загружаются в сетку данных.
Пожалуйста, дайте мне знать, где я делаю ошибку, или если есть лучший способ сделать это!
В моем решении вы должны сделать некоторые настройки перед запуском кода, чтобы использовать экземпляр Matlab в приложении С#.
Добавление необходимой dll: сначала мы добавим ссылку dll со COM-интерфейсом. Нажмите RMB на проекте и выберите опцию [Добавить ссылку]. В новом окне нажмите вкладку COM. В текстовом поле поиска напишите "Matlab". Затем выберите "Matlab Application (версия 7.10)" Библиотека типов ".
Вы должны получить ссылки, как показано ниже:
Теперь вы можете легко делать все, что вы можете сделать на 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();
Я привел пример на этой странице: Источник