检测到上下文切换死锁

我正在尝试使用像Excel数据库一样的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已经无法从COM上下文0xcad028转换到COM上下文0xcad0e0 60秒。 拥有目的地上下文/公寓的线程很可能是在不抽取Windows消息的情况下进行非抽取等待,或者处理非常长的运行操作。 这种情况通常会对性能产生负面影响,甚至可能导致应用程序无响应或内存使用量不断累积。 为了避免这个问题,所有的单线程单元(STA)线程应该使用抽取等待原语(比如CoWaitForMultipleHandles),并在长时间运行的操作中定期抽取消息。

我在网上阅读了一个解决scheme,所以我尝试使用Backgroundworker,但是仍然存在错误消息。 也许我不太了解如何使用Backgroundworker。 任何人都可以解释我在哪里做错了吗?

Interesting Posts