互操作字过程不会立即关闭

manvir_singh

我正在使用多线程WPF应用程序中的互操作词库将word文档导出为PDF,然后使用MagickNet库将它们转换为PNG。

private void generateImagesFromOfficeDoc(Document currentDocument, CustomThread thread = null)
    {
        var token = tokenSource.Token;
        Microsoft.Office.Interop.Word.Application wordApplication = null;

        string[] filePath = currentDocument.OriginalPath.Split('\\');
        currentDocument.Filename = filePath[filePath.Length - 1].Trim();

        string fileNameWithoutExtension = System.IO.Path.GetFileNameWithoutExtension(currentDocument.Filename).Trim();
        string destinationPath;

        destinationPath = pngPath + "\\" + currentDocument.CreatedDate.Year.ToString() + "\\" + currentDocument.Specialty + "\\" + currentDocument.CreatedDate.Month + "\\" +
            currentDocument.CreatedDate.Day + "\\" + fileNameWithoutExtension;

        string pdfPath = magickNETTempDir + "\\" + fileNameWithoutExtension + ".pdf";
        string pdfName = fileNameWithoutExtension + ".pdf";
        string tempFile = magickNETTempDir + "\\" + currentDocument.Filename;

        try
        {
            // Copying the file from the original location to the temp folder. ** This is because impersonation have issues with the interop library.
            File.Copy(currentDocument.OriginalPath, tempFile);

            // Create the directory if it does not exist.
            if (!Directory.Exists(destinationPath))
            {
                Directory.CreateDirectory(destinationPath);
            }

            /************ CONVERTING THE DOCUMENT TO PDF ***************/
            wordApplication = new Microsoft.Office.Interop.Word.Application();
            // Opening the word document
            var wordDocument = wordApplication.Documents.Open(tempFile);
            var pageCount = wordDocument.ComputeStatistics(Microsoft.Office.Interop.Word.WdStatistic.wdStatisticPages, false);
            // Exporting the document to the PDF
            wordDocument.ExportAsFixedFormat(pdfPath, Microsoft.Office.Interop.Word.WdExportFormat.wdExportFormatPDF);
            // Closing the document and the application.
            ((Microsoft.Office.Interop.Word._Document)wordDocument).Close(false);
            ((Microsoft.Office.Interop.Word._Application)wordApplication).Quit(false);
   }

每个线程都会打开一个单词应用程序,并应该在导出文档后将其关闭。使用相同的方法,我将导出的PDF转换为PNG,然后删除临时PDF(排除了代码,因为我认为它与问题无关)。

该过程可以完成工作,但是由于我要转换成千上万的文档,因此我在后台遇到了很多文字处理,从而耗尽了我的RAM。这些过程最终会自行关闭,但是速度非常慢,因此最终我在后台遇到了越来越多的过程。这不会在所有机器上也不会在每个文档上都发生,因此我不确定出了什么问题。

有办法强制关闭它们吗?我已经尝试了通过名称杀死进程的方法,但是这要求应用程序窗口可见,这是我不想要的。

谢里登

使用Microsoft.Office.Interop.Exceldll时遇到类似问题我发现我必须释放以前使用过的所有COM对象,这些对象Excel将从Windows Task Manager的“进程”选项卡中消失。明确地说,我将关闭该应用程序,但是在释放COM对象之前,它的过程在任务管理器中将保持可见。尝试这样的事情:

private void ReleaseComObjects(bool isQuitting)
{
    try
    {
        if (isQuitting)
        {
            workbook.Close(false, missing, missing); 
            excelApplication.Quit();
        }
        Marshal.ReleaseComObject(workbooks);
        Marshal.ReleaseComObject(workbook);
        if (worksheets != null) Marshal.ReleaseComObject(worksheets);
        Marshal.ReleaseComObject(worksheet);
        Marshal.ReleaseComObject(excelApplication);
        workbook = null;
        worksheets = null;
        worksheet = null;
        excelApplication = null;
    }
    catch { }
    finally { GC.Collect(); }
}

private void ReleaseComObjects()
{
    ReleaseComObjects(false);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

互操作字过程不会立即关闭

来自分类Dev

在关闭的连接上写不会立即生成sigpipe

来自分类Dev

Python3 urllib.request不会立即关闭连接

来自分类Dev

FileStream.Close()不会立即关闭文件句柄

来自分类Dev

Primefaces在读取后不会立即关闭DefaultStreamedContent流

来自分类Dev

应用程序可立即打开和关闭,而不会崩溃

来自分类Dev

在关闭的连接上写不会立即生成sigpipe

来自分类Dev

C#中的互操作字应用程序错误

来自分类Dev

UDP客户端异步不会关闭套接字

来自分类Dev

针对pipe(2)的读取操作不会阻止该过程

来自分类Dev

立即运行存储过程

来自分类Dev

为什么套接字关闭后端口没有立即释放?

来自分类Dev

对UIAlertController的操作不会关闭AlertController吗?(禁用解雇)

来自分类Dev

如何确保运行代码时控制台不会立即关闭?

来自分类Dev

托盘图标不会在应用程序上立即关闭。在电子中退出

来自分类Dev

视图控制器不会立即关闭并呈现新的视图控制器

来自分类Dev

MySQL Reader立即关闭

来自分类Dev

SFML窗口立即关闭

来自分类Dev

SslStream.AuthenticateAsClient-发送时无法立即完成非阻塞套接字操作

来自分类Dev

Excel互操作-远程过程调用失败或RPC_E_SERVERFAULT

来自分类Dev

&命令后的“完成”消息不会立即显示,而是在用户操作之后显示。为什么?

来自分类Dev

CGContext不会立即更新

来自分类Dev

UIAlertController不会立即显示

来自分类Dev

setState不会立即更新

来自分类Dev

TextView不会立即更新

来自分类Dev

SetAngularVelocity不会立即运行

来自分类Dev

如何禁用关闭功能以使重要过程不会被中断?

来自分类Dev

立即等待异步操作

来自分类Dev

Swift / C互操作,Swift中的结构数据更改不会在C中更新

Related 相关文章

  1. 1

    互操作字过程不会立即关闭

  2. 2

    在关闭的连接上写不会立即生成sigpipe

  3. 3

    Python3 urllib.request不会立即关闭连接

  4. 4

    FileStream.Close()不会立即关闭文件句柄

  5. 5

    Primefaces在读取后不会立即关闭DefaultStreamedContent流

  6. 6

    应用程序可立即打开和关闭,而不会崩溃

  7. 7

    在关闭的连接上写不会立即生成sigpipe

  8. 8

    C#中的互操作字应用程序错误

  9. 9

    UDP客户端异步不会关闭套接字

  10. 10

    针对pipe(2)的读取操作不会阻止该过程

  11. 11

    立即运行存储过程

  12. 12

    为什么套接字关闭后端口没有立即释放?

  13. 13

    对UIAlertController的操作不会关闭AlertController吗?(禁用解雇)

  14. 14

    如何确保运行代码时控制台不会立即关闭?

  15. 15

    托盘图标不会在应用程序上立即关闭。在电子中退出

  16. 16

    视图控制器不会立即关闭并呈现新的视图控制器

  17. 17

    MySQL Reader立即关闭

  18. 18

    SFML窗口立即关闭

  19. 19

    SslStream.AuthenticateAsClient-发送时无法立即完成非阻塞套接字操作

  20. 20

    Excel互操作-远程过程调用失败或RPC_E_SERVERFAULT

  21. 21

    &命令后的“完成”消息不会立即显示,而是在用户操作之后显示。为什么?

  22. 22

    CGContext不会立即更新

  23. 23

    UIAlertController不会立即显示

  24. 24

    setState不会立即更新

  25. 25

    TextView不会立即更新

  26. 26

    SetAngularVelocity不会立即运行

  27. 27

    如何禁用关闭功能以使重要过程不会被中断?

  28. 28

    立即等待异步操作

  29. 29

    Swift / C互操作,Swift中的结构数据更改不会在C中更新

热门标签

归档