То, что я пытаюсь сделать, это сделать фоновое задание, которое регистрирует каждую разблокировку телефона, но я не могу заставить запись в журнал работать.Методы Async в обратных вызовах
Это то, как я зарегистрировав фона Задача:
public App()
{
this.InitializeComponent();
this.Suspending += this.OnSuspending;
backgroundTask = registerBackgroundTask();
}
private BackgroundTaskRegistration registerBackgroundTask()
{
// -----------------------------
const string taskName = "BackgroundTask_Task";
// -----------------------------
IAsyncOperation<BackgroundAccessStatus> accessStatus = BackgroundExecutionManager.RequestAccessAsync();
SystemTrigger systemTrigger = new SystemTrigger(SystemTriggerType.UserPresent, false);
foreach(var cur in BackgroundTaskRegistration.AllTasks)
{
if(cur.Value.Name == taskName)
{
// The Task is already registered.
return (BackgroundTaskRegistration)(cur.Value);
}
}
BackgroundTaskBuilder builder = new BackgroundTaskBuilder();
builder.Name = taskName;
builder.TaskEntryPoint = typeof(BackgroundTask_Task.Task).FullName;
builder.SetTrigger(systemTrigger);
return builder.Register();
}
И тогда им пытаются это:
public async void Run(IBackgroundTaskInstance taskInstance)
{
Debug.WriteLine("Test");
Debug.WriteLine(DateTime.Now.ToString("g"));
StorageFolder dataFolder = ApplicationData.Current.LocalFolder;
StorageFile logFile = await dataFolder.CreateFileAsync("logFile.txt", CreationCollisionOption.OpenIfExists);
IList<string> logLines = await FileIO.ReadLinesAsync(logFile);
foreach(var s in logLines)
{
Debug.WriteLine(s);
}
logLines.Add(DateTime.Now.ToString("g"));
if(logLines.Count > 5)
{
logLines.RemoveAt(0);
}
await FileIO.AppendLinesAsync(logFile, logLines);
}
Но проблема в том, что не будет читать/писать из LogFile.txt , (Иногда это делалось, но не каждый раз).
Я думал, что я не могу просто сделать асинхронный вызов, чтобы использовать асинхронные методы там, что имело бы смысл. Но затем я попытался запустить его в async lamdbda с ThreadPool.RunAsync
, и не получилось. Что вы обычно делаете, когда хотите вызывать асинхронные методы в функциях, которые не являются асинхронными?
это может помочь http://www.poppastring.com/blog/MakingAsynchronousCallsFromBackgroundTasks.aspx –
Что забыл: он иногда работает .. особенно при использовании WriteTextAsync, чтобы просто написать одну строку, он работает безупречно .. но не тогда, когда я пытаюсь написать/прочитать несколько строк .. – MS669
@NedStoyanov Вот оно! Спасибо огромное! Так легко, и я пытался часами ... – MS669