#c #winforms #opencv
#c #winforms #opencv
Вопрос:
Я создаю приложение Windows form. Но теперь я сталкиваюсь с некоторыми проблемами. Я хочу запустить приложение, а также другой код одновременно.
Справочная информация:
Я хочу создать открытую программу обработки изображений CV, которая работает вместе с Windows form. Я хочу отправить полученную информацию в форму, а также в обратном направлении.
Но проблема в том, что «cout» не выполняется до тех пор, пока форма не будет закрыта. Я надеюсь, что вы сможете мне помочь.
Вот мой Main.cpp Файл:
#include "MyForm.h"
#include <opencv2/opencv.hpp>
#include <iostream>
#include <Windows.h>
using namespace System;
using namespace System::Windows::Forms;
using namespace cv;
using namespace std;
void main() {
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);
TrackingGUI::MyForm form;
Application::Run(% form);
cout << "test" << endl; //This line will execute when the form is closed
}
Комментарии:
1.
Application::Run(gcnew TrackingGUI::MyForm());
запускает цикл сообщений и инициализирует начальную форму. Что выполняется после, если конструктор формы. После этого отображается графический интерфейс. Если вы хотите поговорить с другим процессом, сделайте это вMyForm.h
(или метод, вызываемый оттуда).2. @Jimi Спасибо за ваш ответ. Мой другой код содержит цикл while true . Возможно ли это?
3. Нет, это невозможно, не напрямую. Приложение Windows Forms не является консольным приложением.
while(true)
Цикл, выполняемый в основном потоке, полностью заблокирует весь графический интерфейс. Для этого вам нужен рабочий поток иInvoke()
/BeginInvoke()
или основной поток (для обновления пользовательского интерфейса полученным результатом — с интеллектуальным порогом).4. @Jimi Есть ли способ, чтобы 2 отдельные программы взаимодействовали друг с другом? Как в программе open cv и приложении form.
5. Да, конечно. Тогда это зависит от того, как работает другая программа . Но не спрашивайте меня об OpenCV, я использую только порт .Net, EmguCV, в C #.