#pragma once #include #include #include namespace DX { inline void ThrowIfFailed(HRESULT hr) { if (FAILED(hr)) { // Set a breakpoint on this line to catch Win32 API errors. throw Platform::Exception::CreateException(hr); } } // Function that reads from a binary file asynchronously. inline Concurrency::task ^> ReadDataAsync( Platform::String ^ filename) { using namespace Windows::Storage; using namespace Concurrency; auto folder = Windows::ApplicationModel::Package::Current->InstalledLocation; return create_task(folder->GetFileAsync(filename)) .then([](StorageFile ^ file) { #if !PHONE return FileIO::ReadBufferAsync(file); #else return file->OpenReadAsync(); }).then([](Streams::IRandomAccessStreamWithContentType^ stream) { unsigned int bufferSize = static_cast(stream->Size); auto fileBuffer = ref new Streams::Buffer(bufferSize); return stream->ReadAsync(fileBuffer, bufferSize, Streams::InputStreamOptions::None); #endif }) .then([](Streams::IBuffer ^ fileBuffer) -> Platform::Array ^ { auto fileData = ref new Platform::Array(fileBuffer->Length); Streams::DataReader::FromBuffer(fileBuffer)->ReadBytes(fileData); return fileData; }); } }