示例#1
0
        /// <summary>
        /// Private helper to fire <see cref="UpdateRequested"/>.
        /// </summary>
        private Task FireUpdateRequested()
        {
            RequestUpdateDescriptorEventArgs args = new RequestUpdateDescriptorEventArgs(this);

            UpdateRequested?.Invoke(this, args);
            return(args.DeferAsync());
        }
        /// <summary>
        /// Intended to be registered as a handler for <see cref="StoredFileDescriptor.UpdateRequested"/>.
        /// </summary>
        /// <param name="sender">The descriptor being updated.</param>
        /// <param name="args">EventArgs used to request the file to update with.</param>
        private async void UpdateRequestedHandler(StoredFileDescriptor sender, RequestUpdateDescriptorEventArgs args)
        {
            if (!sender.IsAppOwned)
            {
                DebugHelper.Assert(false, "This should be impossible");
                return;
            }

            ITestableFile file = await this.fileService.PickFileForOpenAsync().ConfigureAwait(false);

            if (file != null)
            {
                DebugHelper.Trace($"Updating cached file");
                ITestableFile storedFile = await GetFileAsync(sender).ConfigureAwait(false);

                if (await CheckShouldProceedWithUpdateAsync(storedFile, file).ConfigureAwait(false))
                {
                    await file.AsIStorageFile.CopyAndReplaceAsync(storedFile.AsIStorageFile)
                    .AsTask().ConfigureAwait(false);

                    await storedFile.ClearReadOnlyFlag().ConfigureAwait(false);
                }
            }
        }