I can’t seem to read a file from a background task in a windows store app. Here’s the code that reads the file content:
async private static Task<string> ReadAsync(string FileName)
{
var folder = ApplicationData.Current.LocalFolder;
var file = await folder.GetFileAsync(FileName);
Windows.Storage.Streams.IRandomAccessStreamWithContentType inputStream = null;
try
{
inputStream = await file.OpenReadAsync();
}
catch (Exception ex)
{
throw (ex);
}
string content = string.Empty;
using (Stream stream = inputStream.AsStreamForRead())
{
using (StreamReader reader = new StreamReader(stream))
{
try
{
// *** program exits on this line
content = await Task.Run(() => reader.ReadToEnd());
}
catch(Exception ex)
{
// no error is caught
content = ex.Message;
}
}
}
return content;
}
The program exits on the line that calls ReadToEnd() on the StreamReader – no error is caught in the try catch block. In the output window I get:
The program ‘[8968] backgroundTaskHost.exe: Managed (v4.0.30319)’ has exited with code 1 (0x1)
Is it possible to access files a background task? If so, where am I going wrong?
It would be helpful if you posted your
IBackgroundTaskcode. Without seeing it I suspect you didn’t callGetDeferral()inside it, e.g.:You need to call
GetDeferral()whenever you are making asynchronous calls inside your background task. This way you tell the runtime it needs to wait for the asynchronous call to complete and not stop the background task as soon asRunexits.Once you’re done, i.e. usually at the end of your
Runmethod, you need to callComplete()on the deferral instance to notify the runtime that you’re done.