Я действительно мучаюсь из-за пространства имен WinRT Windows::Storage со всей его асинхронностью.
У меня есть следующие частные члены в моем заголовочном файле:
//Members for copying the SQLite db file
Platform::String^ m_dbName;
Windows::Storage::StorageFolder^ m_localFolder;
Windows::Storage::StorageFolder^ m_installFolder;
Windows::Storage::StorageFile^ m_dbFile;
И у меня есть следующий блок кода в моем файле реализации:
//Make sure the SQLite Database is in ms-appdata:///local/
m_dbName = L"DynamicSimulations.db";
m_localFolder = ApplicationData::Current->LocalFolder;
m_installFolder = Windows::ApplicationModel::Package::Current->InstalledLocation;
auto getLocalFileOp = m_localFolder->GetFileAsync(m_dbName);
getLocalFileOp->Completed = ref new AsyncOperationCompletedHandler<StorageFile^>([this](IAsyncOperation<StorageFile^>^ operation, AsyncStatus status)
{
m_dbFile = operation->GetResults();
if(m_dbFile == nullptr)
{
auto getInstalledFileOp = m_installFolder->GetFileAsync(m_dbName);
getInstalledFileOp->Completed = ref new AsyncOperationCompletedHandler<StorageFile^>([this](IAsyncOperation<StorageFile^>^ operation, AsyncStatus status)
{
m_dbFile = operation->GetResults();
m_dbFile->CopyAsync(m_localFolder, m_dbName);
});
}
});
Я получаю нарушение доступа к памяти, когда он достигает m_dbFile = operation->GetResults();
Что мне здесь не хватает? Я исхожу из фона С#, в котором это действительно легко сделать:/
Я пытался использовать '.then' вместо регистрации события, но мне даже не удалось их скомпилировать.
спасибо за помощь!
thisна=в переменных, которые нужно захватить внутри лямбды. Но=будет захватывать только те переменные, которые находятся в той же области действия лямбды. Если переменныеm_installFolder,m_localFolderиm_dbNameнаходятся в той же области, что и лямбда, то все в порядке. Если нет, укажите их явно в квадратных скобках. - person yasouser   schedule 06.01.2014