作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个程序可以在单击按钮时创建两个 pdf 文件。它在 WinForms 中使用 Microsoft Office 互操作,文件创建过程如下;
join()
足以处理错误以及在后台创建文件,但是,我想处理文件创建紧随其后的情况,因为在这种情况下,它看起来像这个过程由于线程相互等待,所以它是线性的,除了它会产生瓶颈,其中线程现在排队并阻塞主线程,这使用户等待 12 秒或更长时间。
interop
的文件吗?使用不同的资源以免产生错误? join()
的替代品吗?其中它不会阻塞 UI 线程或主线程?这样文件创建线程就在后台排队(仍然等待对方完成),而不会让用户等待。 Public tsThread As Thread
Public psThread As Thread
Sub SaveDoc(docType,someArgs)
Dim wordApp = New Word.Application
Dim templateBookmarks As Word.Bookmarks
Dim templateName As String
Dim template As New Word.Document
wordApp = CreateObject("Word.Application")
Select Case docType
Case "Type1"
templateName = "SampleType.docx"
template = wordApp.Documents.Add(templatePath & templateName)
templateBookmarks = template.Bookmarks
templateBookmarks.Item("bookmarkInWord").Range.Text = "Foo"
template.Tables(1).Cell(msWordRow, 1).Range.Text = "Value in cell 1"
Case "Type2"
‘Same thing, just different values and template
Case "Type3"
End select
template.SaveAs2(savePath & saveName, Word.WdSaveFormat.wdFormatPDF)
wordApp.ActiveDocument.Close(Word.WdSaveOptions.wdDoNotSaveChanges)
wordApp.Quit()
End Sub
If Not IsNothing(tsThread) Then
If tsThread.IsAlive Then
tsThread.Join()
End If
End If
If Not IsNothing(psThread) Then
If psThread.IsAlive Then
psThread.Join()
End If
End If
tsThread = New Thread(Sub() SaveDoc(docType1,someArgs))
tsThread.Start()
If Not IsNothing(tsThread) Then
If tsThread.IsAlive Then
tsThread.Join()
End If
End If
psThread = New Thread(Sub() SaveDoc(docType2,someArgs))
psThread.Start()
If records = maxRecords Then
If psThread.IsAlive or tsThread.isAlive Then
tsThread.Join()
psThread.Join()
Dim fooThread = New Thread(Sub() SaveDoc(docType3,someArgs))
fooThread.Start()
End If
End If
SwitchForm("Child Form for Step 1")
End Sub
join()
通常在代码的这些部分中:
wordApp.ActiveDocument.Close(Word.WdSaveOptions.wdDoNotSaveChanges)
wordApp.Quit()
templateBookmarks.Item("bookmarkInWord").Range.Text = "Foo"
最佳答案
关于c# - 使用多线程进行慢速 Ms 互操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62086378/
我是一名优秀的程序员,十分优秀!