public async void Run(IBackgroundTaskInstance taskInstance) { backgroundTaskInstance = taskInstance; // Trigger details contain device id and arguments that are provided by the caller in the main app // The taskInstance can always be casted to DeviceUseDetails if this background task was started using a DeviceUseTrigger deviceSyncDetails = (DeviceUseDetails)taskInstance.TriggerDetails; deferral = taskInstance.GetDeferral(); try { backgroundTaskInstance.Progress = 0; cancellationTokenSource = new CancellationTokenSource(); taskInstance.Canceled += new BackgroundTaskCanceledEventHandler(OnCanceled); // For simplicity, no error checking will be done after opening the device. Ideally, one should always // check if the device was successfully opened and respond accordingly. For an example on how to do this, // please see Scenario 1 of this sample. // // The user may also block the device via the settings charm while we are syncing (in background task). In order to deal with // the user changing permissions, we have to listen for DeviceAccessInformation->AccessChanged events. See EventHandlerForDevice // for how to handle DeviceAccessInformation.AccessChanged event. OpenDevice(); // The sample only demonstrates a bulk write for simplicity. // IO operations can be done after opening the device. // For more information on BackgroundTasks, please see the BackgroundTask sample on MSDN. UInt32 bytesWritten = await Task.Run(() => { return(WriteToDeviceAsync()); }, cancellationTokenSource.Token); ApplicationData.Current.LocalSettings.Values[LocalSettingKeys.SyncBackgroundTaskResult] = bytesWritten; ApplicationData.Current.LocalSettings.Values[LocalSettingKeys.SyncBackgroundTaskStatus] = BackgroundTaskInformation.TaskCompleted; } catch (OperationCanceledException /*ex*/) { ApplicationData.Current.LocalSettings.Values[LocalSettingKeys.SyncBackgroundTaskResult] = 0; ApplicationData.Current.LocalSettings.Values[LocalSettingKeys.SyncBackgroundTaskStatus] = BackgroundTaskInformation.TaskCanceled; } finally { // Close the device because we are finished syncing and so that the app may reopen the device device.Dispose(); device = null; } // Complete the background task (this raises the OnCompleted event on the corresponding BackgroundTaskRegistration) deferral.Complete(); }
public async void Run(IBackgroundTaskInstance taskInstance) { backgroundTaskInstance = taskInstance; // Trigger details contain device id and arguments that are provided by the caller in the main app // The taskInstance can always be casted to DeviceUseDetails if this background task was started using a DeviceUseTrigger deviceSyncDetails = (DeviceUseDetails)taskInstance.TriggerDetails; deferral = taskInstance.GetDeferral(); try { backgroundTaskInstance.Progress = 0; cancellationTokenSource = new CancellationTokenSource(); taskInstance.Canceled += new BackgroundTaskCanceledEventHandler(OnCanceled); // For simplicity, no error checking will be done after opening the device. Ideally, one should always // check if the device was successfully opened and respond accordingly. For an example on how to do this, // please see Scenario 1 of this sample. // // The user may also block the device via the settings charm while we are syncing (in background task). In order to deal with // the user changing permissions, we have to listen for DeviceAccessInformation->AccessChanged events. See EventHandlerForDevice // for how to handle DeviceAccessInformation.AccessChanged event. OpenDevice(); // The sample only demonstrates a bulk write for simplicity. // IO operations can be done after opening the device. // For more information on BackgroundTasks, please see the BackgroundTask sample on MSDN. UInt32 bytesWritten = await Task.Run(() => { return WriteToDeviceAsync(); }, cancellationTokenSource.Token); ApplicationData.Current.LocalSettings.Values[LocalSettingKeys.SyncBackgroundTaskResult] = bytesWritten; ApplicationData.Current.LocalSettings.Values[LocalSettingKeys.SyncBackgroundTaskStatus] = BackgroundTaskInformation.TaskCompleted; } catch (OperationCanceledException /*ex*/) { ApplicationData.Current.LocalSettings.Values[LocalSettingKeys.SyncBackgroundTaskResult] = 0; ApplicationData.Current.LocalSettings.Values[LocalSettingKeys.SyncBackgroundTaskStatus] = BackgroundTaskInformation.TaskCanceled; } finally { // Close the device because we are finished syncing and so that the app may reopen the device device.Dispose(); device = null; } // Complete the background task (this raises the OnCompleted event on the corresponding BackgroundTaskRegistration) deferral.Complete(); }
private TaskArguments GetTaskArgumentsFromTriggerDetails(DeviceUseDetails details) { TaskArguments taskArguments = null; string argumentsJsonString = details.Arguments; if (argumentsJsonString != null && argumentsJsonString.Length > 0) { taskArguments = JsonConvert.DeserializeObject<TaskArguments>(argumentsJsonString); } return taskArguments; }