Sample code of what I'm doing:
Code: Select all
static void ThreadPreload1()
{
String reportToLaunch = @"\\server\path\to\template.mrt";
StiReport report1 = new StiReport();
report1.Load(reportToLaunch);
report1.Compile();
string id = @"@pId";
if (report1.CompiledReport.DataSources["MyData"].Parameters.Contains(id))
report1.CompiledReport.DataSources["MyData"].Parameters[id].ParameterValue = "20";
else
report1.CompiledReport.DataSources["MyData"].Parameters.Add(new Stimulsoft.Report.Dictionary.StiDataParameter(id, "20", 22, 50));
report1.Render(false);
}
static void ThreadPreload2()
{
String reportToLaunch = @"\\server\path\to\template.mrt";
StiReport report2 = new StiReport();
report2.Load(reportToLaunch);
report2.Compile();
string id = @"@pId";
if (report2.CompiledReport.DataSources["MyData"].Parameters.Contains(id))
report2.CompiledReport.DataSources["MyData"].Parameters[id].ParameterValue = "25";
else
report2.CompiledReport.DataSources["MyData"].Parameters.Add(new Stimulsoft.Report.Dictionary.StiDataParameter(id, "25", 22, 50));
report2.Render(false);
}
private void Preload()
{
System.Threading.Thread t = new System.Threading.Thread(ThreadPreload1);
t.Start();
System.Threading.Thread t2 = new System.Threading.Thread(ThreadPreload2);
t2.Start();
}
If I modify ThreadPreload2 to compile a different report it works good with both threads...
What's wrong with my code? I'm missing something about thread safety?

thanks in advance
Full error stacktrace:
Code: Select all
System.ArgumentException: Format of the initialization string does not conform to specification starting at index 0
in System.Data.Common.DbConnectionOptions.GetKeyValuePair(String connectionString, Int32 currentPosition, StringBuilder buffer, Boolean useOdbcRules, String& keyname, String& keyvalue)
in System.Data.Common.DbConnectionOptions.ParseInternal(Hashtable parsetable, String connectionString, Boolean buildChain, Hashtable synonyms, Boolean firstKey)
in System.Data.Common.DbConnectionOptions..ctor(String connectionString, Hashtable synonyms, Boolean useOdbcRules)
in System.Data.SqlClient.SqlConnectionString..ctor(String connectionString)
in System.Data.SqlClient.SqlConnectionFactory.CreateConnectionOptions(String connectionString, DbConnectionOptions previous)
in System.Data.ProviderBase.DbConnectionFactory.GetConnectionPoolGroup(String connectionString, DbConnectionPoolGroupOptions poolOptions, DbConnectionOptions& userConnectionOptions)
in System.Data.SqlClient.SqlConnection.ConnectionString_Set(String value)
in System.Data.SqlClient.SqlConnection.set_ConnectionString(String value)
in System.Data.SqlClient.SqlConnection..ctor(String connectionString)
in Stimulsoft.Report.Dictionary.StiSqlAdapterService.CreateConnectionInDataStore(StiDictionary dictionary, StiSqlDatabase database)
in Stimulsoft.Report.Dictionary.StiSqlDatabase.RegData(StiDictionary dictionary, Boolean loadData)
in Stimulsoft.Report.Dictionary.StiDictionary.CreateDatabases(Boolean loadData)
in Stimulsoft.Report.Dictionary.StiDictionary.Connect(Boolean loadData)
in Stimulsoft.Report.Dictionary.StiDictionary.Connect()
in Stimulsoft.Report.Engine.StiRenderProviderV2.ConnectToData(StiReport report)
in Stimulsoft.Report.Engine.StiRenderProviderV2.Render(StiReport report, StiRenderState state)
in Stimulsoft.Report.Engine.StiReportV2Builder.RenderSingleReport(StiReport masterReport, StiRenderState renderState)
in Stimulsoft.Report.StiReport.RenderReport(StiRenderState renderState)
in Stimulsoft.Report.StiReport.Render(StiRenderState renderState, StiGuiMode guiMode)
in Stimulsoft.Report.StiReport.Render(StiRenderState renderState)
in Stimulsoft.Report.StiReport.Render(Boolean showProgress, Int32 fromPage, Int32 toPage)
in Stimulsoft.Report.StiReport.Render(Boolean showProgress)
in BravoClient.Test3.ThreadPreload2() in c:\\Test3.cs:row 260"