参考DLL中的重复设置

时间:2013-09-12 18:03:49

标签: vb.net multithreading dll

我有一个包含多个属性的DLL,以及一个生成后台运行SSRS报告并将其保存为PDF文件的函数。

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

我想让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

1 个答案:

答案 0 :(得分: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)

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