Я немного отчаянно пытаюсь получить результат асинхронного метода winrt с Windows::Foundation::IAsyncOperation
интерфейсом.Проект представляет собой проект Visual Studio Community 2017 c ++ с включенным расширением winRT.Я пытался использовать функции std::future
/ co_await
, а также метод задачи, но вызов GetResults()
всегда генерировал исключение "вызов в неожиданное время".
С помощью следующего кода я не получаюисключение, но GetResults()
возвращает nullptr
.Я также пытался объявить async_op
как shared_ptr
auto async_op = std::make_shared<Windows::Foundation::IAsyncOperation<Windows::Devices::Bluetooth::BluetoothLEDevice^> ^>
и получить к нему доступ с помощью *async_op
в коде Handler
, но я получаю тот же результат.
Любые идеи будут приветствоваться.
Заранее спасибо.
void BleEnumeration::PerformConnectDevice(std::string* bleDevId)
{
std::wstring bleDevId_w_str = std::wstring((*bleDevId).begin(), (*bleDevId).end());
const wchar_t* bleDevId_w_char = bleDevId_w_str.c_str();
Platform::String^ bleDevId_refStr = ref new Platform::String(bleDevId_w_char);
auto async_op = Windows::Devices::Bluetooth::BluetoothLEDevice::FromIdAsync(bleDevId_refStr);
async_op->Completed = ref new Windows::Foundation::AsyncOperationCompletedHandler<Windows::Devices::Bluetooth::BluetoothLEDevice^>(
[async_op] (Windows::Foundation::IAsyncOperation< Windows::Devices::Bluetooth::BluetoothLEDevice^ >^ operation, Windows::Foundation::AsyncStatus status)
{
if (async_op->Status == Windows::Foundation::AsyncStatus::Completed)
{
auto bleDevTest = async_op->GetResults();
}
});
}