Mobile Zone is brought to you in partnership with:

My name is Toni Petrina and I am a software developer and an occasional speaker. Although I primarily develop on the Microsoft stack, I like to learn new technologies. My hobbyist projects range from game development, regardless of the technology, to ALM. I spend most of my time with my girlfriend and someday I will learn how to play the guitar properly. Toni is a DZone MVB and is not an employee of DZone and has posted 51 posts at DZone. You can read more from them at their website. View Full User Profile

Asynchronous Loading Text Files in Metro/C++/DirectX Apps

09.05.2012
| 1885 views |
  • submit to reddit

By just adding a simple modification to the existing ReadDataAsync function, we can load text files asynchronously:

inline Concurrency::task<Platform::String^> ReadStringAsync(Platform::String^ filename)
{
using namespace Windows::Storage;
using namespace Concurrency;

auto folder = Windows::ApplicationModel::Package::Current->InstalledLocation;

task<StorageFile^> getFileTask(folder->GetFileAsync(filename));

auto readBufferTask = getFileTask.then([] (StorageFile^ f)
{
return FileIO::ReadBufferAsync(f);
});

auto byteArrayTask = readBufferTask.then([] (Streams::IBuffer^ b) -> Platform::String^
{
return Streams::DataReader::FromBuffer(b)->ReadString(b->Length);
});

return byteArrayTask;
}

You can load files using the following code (don’t forget it is asynchronous.

auto loadTextTask = ReadStringAsync(L"Assets\\Text.txt")
                                   .then([this](Platform::String^ text)
{
    m_text = text;
});

Enjoy!

Published at DZone with permission of Toni Petrina, author and DZone MVB. (source)

(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)