我正在尝试使用像数据库这样的 Excel 文件。我已经编写了这段代码来打开我将用来工作的 Excel 文档
Private Sub Importa_XLS(ByVal fileData As String, ByVal dbVuoto As String, ByVal dbDest As String)
Dim bw As BackgroundWorker = New BackgroundWorker
bw.WorkerSupportsCancellation = True
bw.WorkerReportsProgress = True
If My.Computer.FileSystem.FileExists(dbDest) Then My.Computer.FileSystem.DeleteFile(dbDest)
My.Computer.FileSystem.CopyFile(dbVuoto, dbDest)
Dim capitoli As New cCapitoli
Dim paragrafi As New cParagrafi
Dim voci As New cVoci
Dim fileStream As FileStream = New FileStream(fileData, FileMode.Open)
Dim file(fileStream.Length) As Byte
Dim percorso As String
percorso = "C:\Users\User\Desktop\prova.xlsx"
System.Threading.Thread.Sleep(3000)
fileStream.Read(file, 0, fileStream.Length)
fileStream.Close()
Dim ExcelEngine As ExcelEngine = New ExcelEngine()
Dim application As IApplication = ExcelEngine.Excel
Dim workbook As IWorkbook = application.Workbooks.Open(New MemoryStream(file), ExcelOpenType.Automatic)
bw.CancelAsync()
Dim gecc As New Syncfusion.GridExcelConverter.GridExcelConverterControl
For Each sheet As IWorksheet In workbook.Worksheets
Dim grid As New GridModel
bw.RunWorkerAsync(percorso)
System.Threading.Thread.Sleep(3000)
gecc.ExcelToGrid(sheet, grid)
bw.CancelAsync()
当编译器执行这条指令gecc.ExcelToGrid(sheet, grid)我等待一分钟,然后 Visual Studio 向我显示这个错误:
CLR 在 60 秒内无法从 COM 上下文 0xcad028 转换到 COM 上下文 0xcad0e0。拥有目标上下文/单元的线程很可能要么进行非泵送等待,要么处理非常长时间运行的操作而不泵送 Windows 消息。这种情况通常会对性能产生负面影响,甚至可能导致应用程序变得无响应或内存使用量随着时间的推移不断累积。为避免此问题,所有单线程单元 (STA) 线程都应使用泵送等待原语(例如 CoWaitForMultipleHandles)并在长时间运行的操作期间定期泵送消息。
我在网上阅读了一个解决方案,所以我尝试使用 Backgroundworker,但错误消息仍然存在。也许我不太了解如何使用Backgroundworker。谁能解释我在哪里做错了?