我有一个包含多个属性的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
答案 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)
通过共享它们,您说无论创建了多少个类实例,总是使用(共享)共享内部变量的相同实例。