Как я могу создавать и изменять элементы пользовательского интерфейса Xaml в файлах .cpp (C++/WinRT)?

Мне нужно создать элемент пользовательского интерфейса Xaml в файле.cpp в моем проекте C++/WinRT (также в Win32 Desktop и WinUI3, а не в UWP), но у меня возникает ошибка потоковой передачи.

       WinRT originate error - 0x8001010E : 'The application called an interface that was marshalled for a different thread.'

Я думаю, что одно можно сказать наверняка: мне нужно каким-то образом попасть в поток пользовательского интерфейса. Изучив множество различных ответов поисковых систем и ответов о переполнении стека, я изучил возможность размещения настраиваемого элемента управления UWP в приложении C++ Win32. Но использование Xaml Islands требует значительных дополнений к моему текущему проекту, и после некоторых поисков я все еще не уверен, является ли элемент управления Xaml синонимом элемента управления UWP. Пытаясь понять, действительно ли этот большой скачок к островам Xaml является единственным способом сделать это, я также изучил Программирование с использованием сходства потоков в уме, поскольку он также, похоже, может напрямую создавать и изменять элементы пользовательского интерфейса Xaml. Однако в данном примере используется переданный элемент пользовательского интерфейса Xaml, а не создается его с нуля.

Вот фрагмент кода, который вызывает сообщение об ошибке вверху, хотя я не уверен, что он полезен, поскольку он очень простой, и я знаю, что его нет в потоке пользовательского интерфейса.

       // the local pch.h file contains various winrt/[UI Xaml] header files.
#include "pch.h"

#include <winrt/Windows.UI.Xaml.Controls.h>
#include "MyProjViewModel.h"
#include "MyProjViewModel.g.cpp"

using namespace winrt;

namespace winrt::MyProj::implementation
{
    MyProjViewModel::MyProjViewModel() : m_myProjContent(winrt::make<MyProj::implementation::MyProjContent>())
    {
        // the line that causes the error
        winrt::Windows::UI::Xaml::Controls::NavigationViewItem homeItem;
        // do things with homeItem
    }

    ...
}

PS Это мой первый вопрос о переполнении стека, пожалуйста, дайте мне знать о любых улучшениях, которые я мог бы внести в создание четкого вопроса с достаточной информацией:)

Изменить: добавлен комментарий к строке, вызывающей ошибку

0 ответов

Другие вопросы по тегам