C# 用于创建word文档的线程同步

C# 用于创建word文档的线程同步,c#,thread-synchronization,C#,Thread Synchronization,我有一个Word模板文件,其中我用数据替换了某些标记。 我试图用Parallel同步文件创建,但正如您在图片上看到的,过了一段时间,我在“使用”窗口中获得了该文件。 我在互联网上查到它,我想这是因为word文件没有关闭,因为它被声明为全局的,但是解决方案()与我的代码非常不同,我不明白我需要做什么。我是创建Word文件的初学者,所以我不完全理解我的代码 有人能给我一个解决我问题的可能方法吗 单词创建者: private static void CreateWordDocument(object

我有一个Word模板文件,其中我用数据替换了某些标记。 我试图用Parallel同步文件创建,但正如您在图片上看到的,过了一段时间,我在“使用”窗口中获得了该文件。 我在互联网上查到它,我想这是因为word文件没有关闭,因为它被声明为全局的,但是解决方案()与我的代码非常不同,我不明白我需要做什么。我是创建Word文件的初学者,所以我不完全理解我的代码

有人能给我一个解决我问题的可能方法吗

单词创建者:

private static void CreateWordDocument(object filename, object SaveAs, string title, string description, string price)
        {
            
            Word.Application wordApp = new Word.Application();
            object missing = Missing.Value;
            Word.Document myWordDoc = null;

            if (File.Exists((string)filename))
            {
                object readOnly = false;
                object isVisible = false;
                wordApp.Visible = false;
                
                myWordDoc = wordApp.Documents.Open(ref filename, ref missing, ref readOnly,
                                        ref missing, ref missing, ref missing,
                                        ref missing, ref missing, ref missing,
                                        ref missing, ref missing, ref missing,
                                        ref missing, ref missing, ref missing, ref missing);
               
                
                myWordDoc.Activate();

                //find and replace
                ReplaceTextInWordDoc(wordApp, "<title>", title);
                ReplaceTextInWordDoc(wordApp, "<description>", description);
                ReplaceTextInWordDoc(wordApp, "<price>", price);

            }
            else
            {
                Console.WriteLine("File not Found!");
            }

            //Save as
            myWordDoc.SaveAs2(ref SaveAs, ref missing, ref missing, ref missing,
                            ref missing, ref missing, ref missing,
                            ref missing, ref missing, ref missing,
                            ref missing, ref missing, ref missing,
                            ref missing, ref missing, ref missing);

            myWordDoc.Close();
            wordApp.Quit();
            Console.WriteLine("File Created!");
        }

您可能想阅读—您可能认为这不是您正在做的,但请注意—“所有当前版本的Microsoft Office都是设计、测试和配置为在客户端工作站上作为最终用户产品运行的。它们采用交互式桌面和用户配置文件。它们不提供可重入级别…”Office automation实际上打开了word应用程序的一个实例。这可能相当脆弱,试图并行处理多个文档可能无法正常工作。
Parallel.ForEach(gameList, (game) =>
            {
                string path = "C:\\Users\\Bence\\Desktop\\ps2\\" + game.title;
                Directory.CreateDirectory(path);
               
                    CreateWordDocument(@"C:\Users\Bence\Desktop\myWord\temp.docx", path + "\\" + game.title + ".docx", game.title, description, game.price);
                
                
            });