本文介绍了使用多线程的excel文件时发生错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在Asp.net中使用以下代码通过Excel Interop处理多线程时:
In Asp.net When working with multi threading via Excel Interop using the below code:
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
发生错误:
An error occurs:
Transition into COM context 0x946d20 for this RuntimeCallableWrapper failed with the following error: The object invoked has disconnected from its clients. (Exception from HRESULT: 0x80010108 (RPC_E_DISCONNECTED)). This is typically because the COM context 0x946d20 where this RuntimeCallableWrapper was created has been disconnected or it is busy doing something else. Releasing the interfaces from the current COM context (COM context 0x946c68). This may cause corruption or data loss. To avoid this problem, please ensure that all COM contexts/apartments/threads stay alive and are available for context transition, until the application is completely done with the RuntimeCallableWrappers that represents COM components that live inside them.
我正在尝试与Quartz.net合作,更多的触发器在后台运行.当2个触发器通过此代码开始作业时:
i''m trying to work with Quartz.net and more triggers do job in background. when 2 trrigger start job by this code:
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
此行中出现以下错误:
Following Error Acoures in This Line:
Dim fileDate As String = Wbook.Sheets(i).Name.ToString.Trim.Replace(" ", "/")
请解决我的问题.
please solve my problem.
推荐答案
发生错误:
An error occurs:
Transition into COM context 0x946d20 for this RuntimeCallableWrapper failed with the following error: The object invoked has disconnected from its clients. (Exception from HRESULT: 0x80010108 (RPC_E_DISCONNECTED)). This is typically because the COM context 0x946d20 where this RuntimeCallableWrapper was created has been disconnected or it is busy doing something else. Releasing the interfaces from the current COM context (COM context 0x946c68). This may cause corruption or data loss. To avoid this problem, please ensure that all COM contexts/apartments/threads stay alive and are available for context transition, until the application is completely done with the RuntimeCallableWrappers that represents COM components that live inside them.
我正在尝试与Quartz.net合作,更多的触发器在后台运行.当2个触发器通过此代码开始作业时:
i''m trying to work with Quartz.net and more triggers do job in background. when 2 trrigger start job by this code:
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
此行中出现以下错误:
Following Error Acoures in This Line:
Dim fileDate As String = Wbook.Sheets(i).Name.ToString.Trim.Replace(" ", "/")
请解决我的问题.
please solve my problem.
这篇关于使用多线程的excel文件时发生错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!