仅在最后一个循环上阻止主线程以允许文件上载完成

时间:2016-07-15 13:55:11

标签: vb.net multithreading backgroundworker

我有一个主要的UI,有很长的处理任务。我使用来自Web服务器的信息更新了几百个数据库。数据库存储在存储库中,需要下载,然后更新,然后上载(重新登录)到存储库。

我并不关心工作的长度,但我已经实现了一个后台工作线程来处理上传,以便下一个文件可以开始处理。该过程的每个步骤都会记录到几个不同的XML日志文件中,以便以后分析每个文件中更新的内容。工作得很好,直到......

我的问题是,在我循环之前,我调用运行异步后台工作程序来处理上传,在最后一个文件之前工作得很好。我已经尝试了十几种不同的技术来阻止,IsBusy,join,sleep等主线程,以便在我可以关闭我的XML编写器之前等待只上传最后一个文件,并确认所有文件正确上传。

我还尝试实现RunWorkerCompleted,它可以启动,但只有在返回主线程后,所以即使我设置了一个标志或为事件的最后一个条件添加逻辑,我也会遇到“使用中”错误在我的XML编写器上。因为我认为它已经完成更新,所以无法想出那一个。

我可以发布所需的任何代码。在这一点上它有点意大利面,我想我可以使用一些帮助,方向,例子,如何阻止我的循环的最后一个记录上的主线程,所以我可以允许最终上传完成。我真的不喜欢只是添加睡眠,因为它看起来效率太低而且在实际处理完成后并没有真正响应。

vb.net

主要用户界面

connect_to_access_db.rb

require 'win32ole'

connection = WIN32OLE.new('ADODB.Connection')
connection.Open('Provider=Microsoft.ACE.OLEDB.12.0;
             Data Source=c:\path\filename.accdb')


SQLstatement = "SELECT * FROM TABLE"
recordset = WIN32OLE.new('ADODB.Recordset')
res = recordset.Open(SQLstatement, connection)
p res

在TestWorker_RunWorkerCompleted

之前触发
For 
  '  Processing ....

        returnFiletoSS()

        fileCountChker = fileCountChker + 1
Next

myXmlTextWriter.WriteEndElement()
myXmlTextWriter.Close()

myXmlTextWriter1.WriteEndElement()
myXmlTextWriter1.Close()

objWriter.Close()


    '  Prior test logic
    ' ''If fileCountChker = numOfFiles Then
    ' ''    While TestWorker.IsBusy
    ' ''        Threading.Thread.Sleep(400)
    ' ''    End While

调用此函数......

    If lastRecord Then
        objWriter1.Close()
    Else

        While lastRecord <> True
            Threading.Thread.Sleep(400)
        End While
        objWriter1.Close()
    End If

0 个答案:

没有答案