使用multithreading的excel文件工作时出错

在Asp.net中使用以下代码通过Excel Interop使用multithreading时:

Public Class ImportService Public Function ImportsFiles(ByVal files as list(Of String)) Dim rowEffect As Integer = 0 For j as Integer=0 to files.Count-1 dim fileAddress=files(j) Dim app As New Application Dim Wbook As Workbook Try Wbook = app.Workbooks.Open(fileAddress, [ReadOnly]:=True) For i As Integer = 1 To Wbook.Sheets.Count If Not Wbook.Sheets(i).Name.ToString.ToLower.Contains("partial read of load profile") Then Dim con As New System.Data.OleDb.OleDbConnection("provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & fileAddress & "; Extended Properties=""Excel 12.0 Xml;HDR=No;IMEX=1"";") Dim cmd As New OleDbCommand Dim s As String = "SELECT * FROM [" & Wbook.Sheets(i).Name & "$]" cmd.CommandText = s cmd.Connection = con Dim da As New OleDbDataAdapter da.SelectCommand = cmd Dim dt As New System.Data.DataTable da.Fill(dt) Dim err As New Dictionary(Of String, String) Dim fileDate As String = Wbook.Sheets(i).Name.ToString.Trim.Replace(" ", "/") rowEffect += InsertLps(Path.GetFileName(fileAddress), fileDate, dt.Rows, err) dt.Dispose() da.Dispose() con.Dispose() cmd.Dispose() End If ReleaseCOMObject(Wbook.Sheets(i)) Next Wbook.Close(SaveChanges:=False) Catch ex As Exception summary.Add(fileAddress, ex.Message) Finally GC.Collect() GC.WaitForPendingFinalizers() GC.Collect() GC.WaitForPendingFinalizers() If app.Workbooks IsNot Nothing Then For Each wb In app.Workbooks For Each ws In wb.Worksheets ReleaseCOMObject(ws) Next wb.Close(False) ReleaseCOMObject(wb) Next End If app.Workbooks.Close() app.Quit() ReleaseCOMObject(app) GC.WaitForFullGCComplete() Next End Function End Class 

发生错误:

对此RuntimeCallableWrapper转换到COM上下文0x946d20失败,出现以下错误:调用的对象已与其客户端断开连接。 (从HRESULTexception:0x80010108(RPC_E_DISCONNECTED))。 这通常是因为创build此RuntimeCallableWrapper的COM上下文0x946d20已断开连接,或者正在忙于执行其他操作。 从当前的COM上下文(COM上下文0x946c68)释放接口。 这可能会导致损坏或数据丢失。 为了避免这个问题,请确保所有COM上下文/公寓/线程都保持活动状态,并且可用于上下文转换,直到应用程序完全使用表示其内部的COM组件的RuntimeCallableWrappers完成。

我正在尝试与Quartz.net和更多的触发器在后台做工作。 当2 trigger由此代码开始工作时:

 Public Class ImportJob Implements IJob Public Sub Execute(context As IJobExecutionContext) Implements IJob.Execute Dim importHelpers As New ImportFilesHelpers Dim exts As New List(Of String) exts.Add(".xls") Dim files = importHelpers.GetFiles(ImportFilesHelpers.BaseAssress, exts) Dim import = New ImportService() import.ImportsFiles(files) End Sub End Class 

以下错误在这行中

 Dim fileDate As String = Wbook.Sheets(i).Name.ToString.Trim.Replace(" ", "/") 

谢谢。