1234567891011121314151617181920212223242526272829303132333435363738394041 |
- #pragma once
- #include <wrl/client.h>
- #include <ppl.h>
- #include <ppltasks.h>
- 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<Platform::Array<byte>^> 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)
- {
- return file->OpenReadAsync();
- }).then([] (Streams::IRandomAccessStreamWithContentType^ stream)
- {
- unsigned int bufferSize = static_cast<unsigned int>(stream->Size);
- auto fileBuffer = ref new Streams::Buffer(bufferSize);
- return stream->ReadAsync(fileBuffer, bufferSize, Streams::InputStreamOptions::None);
- }).then([] (Streams::IBuffer^ fileBuffer) -> Platform::Array<byte>^
- {
- auto fileData = ref new Platform::Array<byte>(fileBuffer->Length);
- Streams::DataReader::FromBuffer(fileBuffer)->ReadBytes(fileData);
- return fileData;
- });
- }
- }
|