Синхронизация двух заданий на чел. В приложении метро Windows 8

Это приложение камеры метро от MSDN. Этот код предназначен для предварительного просмотра с камеры. Здесь в поле со списком будет отображаться список камер. Пользователь может выбрать камеру, чтобы просмотреть предварительный просмотр выбранной камеры, но когда я меняю камеру, он сначала освобождает ресурс и затем запускается. предварительный просмотр выбранной камеры. Поскольку процесс выпуска является асинхронным процессом, он выполняется в фоновом режиме, поэтому перед его выпуском запускается предварительный просмотр выбранной камеры, а в процессе среднего выпуска удаляется указатель «m_MediaCaptureMgr» и происходит сбой программы.

В Win 32 я могу использовать объект waitforSingle для его синхронизации. Я хотел знать, как лучше всего синхронизировать в задачах WinRT и ppl.

void CameraApp::MainPage::cmbCameraSelector_SelectionChanged(Platform::Object^ sender,  Windows::UI::Xaml::Controls::SelectionChangedEventArgs^ e)
{
if(m_DeviceVector.size() > 0)
{
m_CaptureInitSettings->VideoDeviceId = m_DeviceVector[cmbCameraSelector->SelectedIndex]->Id;
InitMediaCapture();
}
}

void CameraApp::MainPage::InitMediaCapture()
{
ReleaseMediaCapture();

//Sleep(3000);
auto _this = this;
m_MediaCaptureMgr = ref new MediaCapture();

task<void> stratPreview(m_MediaCaptureMgr->InitializeAsync(m_CaptureInitSettings));
stratPreview.then([_this]
{
_this->previewElement->Source = _this->m_MediaCaptureMgr;
task<void> startPrev(_this->m_MediaCaptureMgr->StartPreviewAsync());
startPrev.then([=]
{

return _this->GetCameraSettings();
});
});

}
void CameraApp::MainPage::ReleaseMediaCapture()
{
if (m_MediaCaptureMgr )
{
auto prevOp = m_MediaCaptureMgr->StopPreviewAsync();
task<void> releaseMediaCapture(m_MediaCaptureMgr->StopPreviewAsync());
releaseMediaCapture.then([=]
{
m_MediaCaptureMgr = nullptr;
bRelease = false;
});
}
}

1

Решение

В WinRT вы можете использовать параллелизм :: событие учебный класс. Метод событие :: ждать должна быть хорошей заменой WaitForSingleObject

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]