2016-01-18 2 views
1

Являясь новым для потоковой обработки и начал приложение с двумя потоками, он выполняет базовый метод преобразования Doc в PDF. У клиента есть файлы Word 2003 для конвертирования.Threading слово подпрограмма для преобразования doc в PDF

Однако код работает, кажется, что он открывает экземпляр слова для экрана, он открыл окно и индикатор выполнения, прежде чем я его вложил.

Должен ли я обрабатывать слово по-другому?

Я пытаюсь вычислить процессор, выполнив более 1 потока и ускоряя конвертирование файлов 30000 doc.

Я не хочу использовать какие-либо сторонние инструменты, просто слово, как из сообщений на сайте. Word является лучшим при конвертации.

Главная

MyThread thr1 = new MyThread(); 
MyThread thr2 = new MyThread(); 

Thread tid1 = new Thread(new ThreadStart(thr1.Thread1)); 
Thread tid2 = new Thread(new ThreadStart(thr2.Thread1)); 

tid1.Name = "Thread 1"; 
tid2.Name = "Thread 2"; 

tid1.Start(); 
tid2.Start(); 

Резьба1 Код

 Word.Application word = new Microsoft.Office.Interop.Word.Application(); 

    // C# doesn't have optional arguments so we'll need a dummy value 
    object oMissing = System.Reflection.Missing.Value; 

    // Get list of Word files in specified directory 
    DirectoryInfo dirInfo = new DirectoryInfo(@"C:\ConvertToPDF\Docs"); 
    FileInfo[] wordFiles = dirInfo.GetFiles("*.doc"); 

    Thread thr = Thread.CurrentThread; 

    if (thr.Name == "Thread 1") 
     { 
     var orderedSort = wordFiles.OrderBy(f => f.CreationTime); 
     } 
    else 
     { 
     var orderedSort = wordFiles.OrderByDescending(f => f.CreationTime); 
     } 

    word.Visible = false; 
    word.ScreenUpdating = false; 

    foreach (FileInfo wordFile in wordFiles) 
     { 
     // Cast as Object for word Open method 
     Object filename = (Object)wordFile.FullName; 

     // Use the dummy value as a placeholder for optional arguments 
     Document doc = word.Documents.Open(ref filename, ref oMissing, 
     ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, 
     ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, 
     ref oMissing, ref oMissing, ref oMissing, ref oMissing); 
     doc.Activate(); 

     object outputFileName = wordFile.FullName.Replace(".doc", ".pdf"); 
     object fileFormat = WdSaveFormat.wdFormatPDF; 

     // Save document into PDF Format 
     doc.SaveAs(ref outputFileName, 
       ref fileFormat, ref oMissing, ref oMissing, 
       ref oMissing, ref oMissing, ref oMissing, ref oMissing, 
       ref oMissing, ref oMissing, ref oMissing, ref oMissing, 
       ref oMissing, ref oMissing, ref oMissing, ref oMissing); 

     object saveChanges = WdSaveOptions.wdDoNotSaveChanges; 
     ((_Document)doc).Close(ref saveChanges, ref oMissing, ref oMissing); 
      doc = null; 
     } 

     // word has to be cast to type _Application so that it will find 
     // the correct Quit method. 
     ((_Application)word).Quit(ref oMissing, ref oMissing, ref oMissing); 
     word = null; 
+1

Не уверен, что вы просите здесь, но Word не работает без головы. Многопоточность приложения, которое открывает Word, не изменит этого. –

+0

Когда он открывает документ Word, его фактически открывающее слово ... прежде чем это было просто окно с сохранением PDF-файла – Ggalla1779

+1

Вы * все еще открываете Word, вы просто не видите окно. Не делай этого. Использование нескольких потоков не поможет вам, так как одному приложению придется сериализовать запросы из потоков и может в конечном итоге зайти в тупик. Хуже того, если вы действительно не понимаете COM-взаимодействие, вы можете создавать новые экземпляры Word для каждого файла до тех пор, пока на сервере не закончится память. Если вы * не * действительно хотите файлы Word, используйте библиотеку для непосредственного создания файлов PDF. Даже если вы это сделаете, вам все равно нужно использовать библиотеку для этого –

ответ

1

Не используйте слово на сервере. У тебя будет плохое время.

Используйте OpenXML SDK:

https://www.microsoft.com/en-us/download/details.aspx?id=5124

+0

Файлы находятся на локальном диске, чтобы ускорить перемещение в PDF. Open XML начал с Office 2007, клиент имеет файлы документов 2003 года – Ggalla1779

+0

Затем используйте другую библиотеку. Я использовал это успешно: http://www.aspose.com/. – jvenema

Смежные вопросы