【发布时间】:2017-07-24 10:34:54
【问题描述】:
我使用 DocumentFormat.OpenXml 来生成 docx。我尝试从 WebClient 异步加载小的 png 图像(20-50 kb)到我的 docx。我对一个代码有不同的结果:
- 没问题
- NullReferenceException
- 文件格式异常
- ObjectDisposedException
- InvalidOperationException
这段代码演示了我的问题:
internal class Program
{
public static void Main(string[] args)
{
using (var outputStream = new MemoryStream())
{
using (var doc = WordprocessingDocument.Create(outputStream, WordprocessingDocumentType.Document))
{
var mainPart = doc.AddMainDocumentPart();
new Document(new Body()).Save(mainPart);
var tasks = Directory.GetFiles("images").Select(async it =>
await AddImagePart(it, mainPart.AddImagePart(ImagePartType.Png)).ConfigureAwait(false));
Task.WaitAll(tasks.ToArray());
}
File.WriteAllBytes("output.docx", outputStream.ToArray());
}
}
private static async Task AddImagePart(string path, ImagePart imagePart)
{
using (var client = new WebClient())
{
var image = await client.DownloadDataTaskAsync(path).ConfigureAwait(false);
imagePart.FeedData(new MemoryStream(image));
}
}
packages.config
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="DocumentFormat.OpenXml" version="2.7.2" targetFramework="net46" />
<package id="System.IO.FileSystem.Primitives" version="4.0.1" targetFramework="net46" />
<package id="System.IO.Packaging" version="4.0.0" targetFramework="net46" />
</packages>
git 上描述了大文件和 .net 小于 4.6 的问题。但我使用小文件和 .net4.6。
【问题讨论】:
标签: asynchronous openxml docx