static async Task WriteFileAsync(string fileName, IReadOnlyList<ImageReference> images, FileHeader cic, BookmarkCollection bookmarks, IProgress<int> progress) { using (FileStream writeStream = new FileStream(fileName, FileMode.Create, FileAccess.Write)) { cic.Save(writeStream); bookmarks.Save(writeStream); using (BinaryWriter writer = new BinaryWriter(writeStream, System.Text.Encoding.Unicode, true)) { writer.Write(images.Count); // 画像数 for (int i = 0; i < images.Count; i++) { await images[i].SaveAsync(writer).ConfigureAwait(false); progress?.Report((i + 1) * 100 / images.Count); } } } }
public async Task SaveAsync(string fileName, IProgress<int> progress) { using (EnterSingleOperation()) using (EnterUndirtiableSection()) { var inconsistency = CheckInconsistency(); if (inconsistency != ConsistencyValidatedDataTypes.None) throw new InconsistentDataException(Properties.Resources.InconsistentData, inconsistency); var header = new FileHeader(Title, Author, DateOfPublication, PageTurningDirection, Thumbnail); await WriteFileAsync(fileName, Images.ToArray(), header, Bookmarks, progress).ConfigureAwait(false); FileVersion = header.FileVersion; IsDirty = false; } }