1

我有一个具有多个属性的 DLL 和一个生成在后台运行 SSRS 报告并将其保存到 PDF 文件的函数。

我有一个数据表,其中包含需要生成的所有报告以及需要保存的位置。

我想让 DLL 的每个实例在单独的线程中运行。我试了一下,发现 DataTable 中的第二行覆盖了第一行。

这是类/DLL代码

Public Class SSRSFunctions
    Private Shared _Formated_Parameters As String
    Private Shared _Report_Parameters As Dictionary(Of String, String)

    Public Property FORMATED_PARAMETERS() As String
        Get
            Return _Formated_Parameters
        End Get
        Set(ByVal value As String)
            _Formated_Parameters = value
        End Set
    End Property
    Public Sub New()
        _Report_Parameters = New Dictionary(Of String, String)
    End Sub
    Public Function RenderReportToFile() As String

        'RenderReportHere

    End Function
    Public Sub AddParameter(ByVal Name As String, ByVal Value As String)
        If _Report_Parameters.ContainsKey(Name) Then
            _Report_Parameters.Remove(Name)
            _Report_Parameters.Add(Name, Value)
        Else
            _Report_Parameters.Add(Name, Value)
        End If
    End Sub
End Class

这是调用代码

Private Sub CheckForNewRequests()
    'Filter DataTable for Reports to Run

    For Each dr As DataRow in DateTable.Rows
        Dim rpt As New SSRSFunctions
        Dim t1 As New Threading.Thread(AddressOf StartNewThread)            
        rpt.FORMATED_PARAMETERS = (dr("REPORT_PARAMS"))
        t1.Start(rpt)
    Next
End Sub
Private Function StartNewThread(ByVal report As SSRSFunctions) As String
    Return report.RenderReportToFile()
End Function

我试图弄清楚为什么“Dim rpt As New SSRSFunctions”没有创建 DLL 的新实例,因此 dataTable 的第二行有一个新实例来存储它的参数。

第二行覆盖第一行。

帮助?

感谢 jlimited

4

1 回答 1

1

不要让私有属性共享,Shared从声明中删除关键字。改变

Private Shared _Formated_Parameters As String
Private Shared _Report_Parameters As Dictionary(Of String, String)

Private _Formated_Parameters As String
Private _Report_Parameters As Dictionary(Of String, String)

通过共享它们,您是在说无论创建多少类实例,始终使用(共享)共享内部变量的相同实例。

于 2013-09-12T18:43:46.817 回答