在后台工作者

时间:2017-04-03 16:08:11

标签: .net vb.net

我有两个背景工作者,需要将事物从第一个传递到另一个。

这是我试图传递的内容:

Dim APP As Excel.Application = New Microsoft.Office.Interop.Excel.Application()
Dim workbook As Excel.Workbook
Dim worksheet As Excel.Worksheet
Dim worksheetRange As Excel.Range
Dim status As String


这就是我尝试传递它的方式:

Private Sub bwExport_DoWork(sender As Object, e As DoWorkEventArgs) Handles bwExport.DoWork
    Dim APP As Excel.Application = New Microsoft.Office.Interop.Excel.Application()
    Dim workbook As Excel.Workbook
    Dim worksheet As Excel.Worksheet
    Dim worksheetRange As Excel.Range
    Dim status As String

    'code stuff here

    Dim ExportList As New List(Of Object)(5)
    ExportList.Add(APP)
    ExportList.Add(workbook)
    ExportList.Add(worksheet)
    ExportList.Add(worksheetRange)
    ExportList.Add(status)
    e.Result = ExportList
End Sub


Private Sub bwExport_RunWorkerCompleted(sender As Object, e As RunWorkerCompletedEventArgs) Handles bwExport.RunWorkerCompleted
        bwExportFinish.RunWorkerAsync(e.Result)
End Sub


这就是我尝试检索它的方式:

Private Sub bwExportFinish_DoWork(sender As Object, e As DoWorkEventArgs) Handles bwExportFinish.DoWork
    Dim ExportList As List(Of Object) = TryCast(e.Result, List(Of Object))
    Dim APP As Excel.Application = TryCast(ExportList(0), Excel.Application)
    Dim workbook As Excel.Workbook = TryCast(ExportList(1), Excel.Workbook)
    Dim worksheet As Excel.Worksheet = TryCast(ExportList(2), Excel.Worksheet)
    Dim worksheetRange As String = TryCast(ExportList(3), String)
    Dim status As String = TryCast(ExportList(4), String)

    'Save spreadsheet
    Dim SavePath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) & "\" & label1.Text & " " & Status & " Status " & System.DateTime.Now.ToString("MM.dd.yyyy HH;mm;ss") & ".xlsx"
    workbook.SaveAs(SavePath)
    workbook.Close(False)
End Sub


这就是我得到的错误:
1。行: Dim APP As Excel.Application = TryCast(ExportList(0),Excel.Application())
给我错误:类型的价值'应用程序()'无法转换为'应用程序' 我是盲目的。我刚做了一个格式化错误。这是固定的。

2。我收到错误,该错误会在VS2015中显示一个页面,其中显示"来源不可用"然后类型&System; System.Reflection.TargetInvocationException'未处理的异常。发生在mscorlib.dll 中 有没有人有任何想法?

1 个答案:

答案 0 :(得分:2)

嗯,你的代码中有一些错误,我会指出它们。

  • 正如我在上面的评论中提到的那样:

      

    错误实际上很好地解释了它。你的原始变量是   类型为Excel.Application,而Excel.Application()是一个数组   相同的类型。因此,您需要将其转换为Excel.Application   如果甚至需要铸造。

  • 在您的第二个BackgroundWorker(bwExportFinish)中,您尝试获取从第一个BackgroundWorker传递的List(Of Object),但您使用的是错误的变量({{1} }})。怎么样?好吧,您将列表存储在第一个 BackgroundWorker的e.Result中,而不是第二个中。现在,在您将该列表传递给第二个BackgroundWorker之后,您可以使用e.Result而不是e.Argument来访问它。

  • 另一个小错误是您创建了e.Result类型的变量worksheetRange,然后将其转换为Excel.Range

因此,第二个BackgroundWorker中的代码应如下所示:

String

希望有所帮助:)