Member 13462604 Ответов: 1

XAML для потоковой обработки windows embedded


Привет,

как я могу соединить рабочий поток "CreateThread ()" с потоком " GUI"
Я использую Blend для создания кода XAML. После этого проект импортируется в Visual Studio Project (Embedded Compact Project). Я могу запустить проект без сбоев.

В моем классе MainPage (XRCustomUserControlImpl) я вижу реализацию кнопки и обработчики событий, и я могу создать поток для конкретного события кнопки, но как я могу прервать графический интерфейс, чтобы обновить какой-то элемент?

Я не нашел никакой информации для XAML и Embedded Compact (некоторые примеры кода), все, что я нашел, было для C#.

Было бы здорово, если бы кто-нибудь мог мне помочь.

с уважением

Что я уже пробовал:

-> BEGIN_MESSAGE_MAP, сообщение об ошибке
- > Сообщение Post, не ясно, как реализовать GetMessage () в потоке GUI.

Richard MacCutchan

Все это не имеет смысла. Вы спрашиваете, как создавать потоки в XAML, что невозможно, XAML это декларативный язык для структуры пользовательского интерфейса окна. Затем вы упоминаете BEGIN_MESSAGE_MAP, который является макросом MFC. И наконец PostMessage это вызов Win32 API.

Richard MacCutchan

Все это не имеет смысла. Вы спрашиваете, как создавать потоки в XAML, что невозможно, XAML это декларативный язык для структуры пользовательского интерфейса окна. Затем вы упоминаете BEGIN_MESSAGE_MAP, который является макросом MFC. И наконец PostMessage это вызов Win32 API.

Member 13462604

Так что, похоже, мое описание проблемы не совсем ясно.
1 проект - > XAML (создан с помощью Blend)
2 Project- & gt; C++ Project (поддержка импорта того проекта Blend, который создает код C++ )
вот так для обработчика событий:

HRESULT MainPage:: BtnClick(IXRDependencyObject *pSender,
XRMouseButtonEventArgs *pArgs)
{
HRESULT hr = E_NOTIMPL;
if ((NULL = = pSender) | /(NULL == pArgs))
{
ч = значение e_invalidarg;
}
вернуть час;
}


Я могу запустить этот проект и запустить приложение без каких-либо проблем. Я могу добавить простой код к этому обработчику событий, например, когда я нажимаю кнопку, текст текстового поля изменяется. Теперь я хочу создать отдельный поток, например, для последовательного интерфейса. Каждый раз, когда поступают новые данные, графический интерфейс должен обновляться. Итак, и это моя проблема, каков правильный механизм для использования с этим конкретным кодом C++, созданным из XAML?
Я могу создать поток, и он работает, но как я могу сигнализировать графическому интерфейсу, что новые данные доступны?

1 Ответов

Рейтинг:
1

Richard MacCutchan

Все это не имеет смысла. Вы спрашиваете, как создавать потоки в XAML, что невозможно, XAML это декларативный язык для структуры пользовательского интерфейса окна. Затем вы упоминаете BEGIN_MESSAGE_MAP, который является макросом MFC. И наконец PostMessage это вызов Win32 API.


Member 13462604

Так что, похоже, мое описание проблемы не совсем ясно.
1 проект - > XAML (создан с помощью Blend)
2 Project- & gt; C++ Project (поддержка импорта того проекта Blend, который создает код C++ )
вот так для обработчика событий:

HRESULT MainPage:: BtnClick(IXRDependencyObject *pSender,
XRMouseButtonEventArgs *pArgs)
{
HRESULT hr = E_NOTIMPL;
if ((NULL = = pSender) | /(NULL == pArgs))
{
ч = значение e_invalidarg;
}
вернуть час;
}


Я могу запустить этот проект и запустить приложение без каких-либо проблем. Я могу добавить простой код к этому обработчику событий, например, когда я нажимаю кнопку, текст текстового поля изменяется. Теперь я хочу создать отдельный поток, например, для последовательного интерфейса. Каждый раз, когда поступают новые данные, графический интерфейс должен обновляться. Итак, и это моя проблема, каков правильный механизм для использования с этим конкретным кодом C++, созданным из XAML?
Я могу создать поток, и он работает, но как я могу сигнализировать графическому интерфейсу, что новые данные доступны?

Richard MacCutchan

У меня нет опыта использования XAML-определенных форм из C++, но в C# вам нужно использовать различные методы, как описано в Как сделать Потокобезопасные вызовы элементов управления Windows Forms / Microsoft Docs[^].