【问题标题】:asynchronous load ImagePart data error异步加载 ImagePart 数据错误
【发布时间】: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


    【解决方案1】:

    也许您应该阅读 this post 关于 async\await 错误的信息。

    尝试制作ConfigureAwait(false)

    【讨论】:

    • 链接已损坏。我用ConfigureAwait(false) 编辑了我的问题。问题没有解决。
    猜你喜欢
    • 2019-01-10
    • 2019-03-29
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    • 2021-01-03
    • 2020-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多