|
|
|
[C#.NET,Winapp]สร้าง Thread ให้ รัน แบบไม่ต้องรอกันทำไงครับ (อันไหนเสร็จก็แสดงผลลัพก่อน) |
|
|
|
|
|
|
|
ผมทำการเปิด Form ขึ้นมาใหม่ รัน Crystal Report Viewer จากการทดสอบ 5 form ใส่ Parameter แค่ 1 เดือน จะรันเสร็จพร้อมเสร็จ พร้อมๆ กัน
แต่พอ ให้ตัวนึง ใส่พารามิเตอร์ที่ รันทั้ง ปี (ปกติ ถ้ารันด้วย Crystal จะต้องรอประมาณ 50 นาที) จากที่เสร็จพร้อม ๆ กัน กลับกลายเป็นว่า พวก ที่มี Parameter แค่ 1 เดือน รันไม่ขึ้นเลยครับ เหมือนกับรอให้ ตัว พารามิเตอร์ที่ รันทั้ง ปี เสร็จก่อน
Code การเรียกใช้อยู่ด้านล่างครับ
Code (C#)
Thread objThread = new Thread(new ThreadStart(() => ReadValueKey(fo, new ReportDocument(), new Form2())));
objThread.Name = fo;
objThread.IsBackground = true;
objThread.Start();
Thread.Sleep(lstCount.Count * 1000);
Code (C#)
private void ReadValueKey(string session, ReportDocument oRpt,Form2 oForm2)
{
if (session.Contains("Parameter"))
{
oRpt.Load(objTIniFile.IniReadValue(session, "ReportName"));
oRpt.SetParameterValue(objTIniFile.IniReadValue(session, "P1_Name"), objTIniFile.IniReadValue(session, "P1_Value"));
oRpt.SetParameterValue(objTIniFile.IniReadValue(session, "P2_Name"), objTIniFile.IniReadValue(session, "P2_Value"));
//oRpt.ExportToDisk(CrystalDecisions.Shared.ExportFormatType.Excel, objTIniFile.IniReadValue(session, "ExportPath") + ".xls");
oForm2.Text = session + " " + objTIniFile.IniReadValue(session, "P1_Value") + " " + objTIniFile.IniReadValue(session, "P2_Value");
oForm2.crystalReportViewer1.ReportSource = oRpt;
oForm2.ShowDialog();
}
else
{
oRpt.Load(objTIniFile.IniReadValue(session, "ReportName"));
oRpt.Refresh();
//oRpt.ExportToDisk(CrystalDecisions.Shared.ExportFormatType.Excel, objTIniFile.IniReadValue(session, "ExportPath") + ".xls");
oForm2.Text = session + " " + objTIniFile.IniReadValue(session, "P1_Value") + " " + objTIniFile.IniReadValue(session, "P2_Value");
oForm2.crystalReportViewer1.ReportSource = oRpt;
oForm2.ShowDialog();
}
}
Tag : .NET, Crystal Report, Win (Windows App), C#
|
|
|
|
|
|
Date :
2013-11-08 10:53:57 |
By :
ang89gunner |
View :
4119 |
Reply :
6 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ได้ดู Backgroundworker หรือยังครับ และในกรณ๊มีมากกว่า 1 Process ให้ใช Thread ครอบอีกที
|
|
|
|
|
Date :
2013-11-08 10:55:05 |
By :
mr.win |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ตอบความคิดเห็นที่ : 1 เขียนโดย : mr.win เมื่อวันที่ 2013-11-08 10:55:05
รายละเอียดของการตอบ ::
คือยังไงหรอครับ ใช้ Background ร่วมกับ Thread
Code (C#)
private void TestMutiWorker(List<string> lstCount)
{
BackgroundWorker[] worker = new BackgroundWorker[lstCount.Count];
int i = 0;
foreach (string fo in lstCount)
{
worker[i] = new BackgroundWorker();
worker[i].DoWork += new DoWorkEventHandler(Form1_DoWork);
worker[i].RunWorkerAsync(fo);
Thread.Sleep(1000);
i++;
}
Code (C#)
void Form1_DoWork(object sender, DoWorkEventArgs e)
{
// แล้วจับ Code รัน Form มาไว้ตรงนี้หรอครับ
string session = (string)e.Argument;
if (session.Contains("Parameter"))
{
oRpt.Load(objTIniFile.IniReadValue(session, "ReportName"));
oRpt.SetParameterValue(objTIniFile.IniReadValue(session, "P1_Name"), objTIniFile.IniReadValue(session, "P1_Value"));
oRpt.SetParameterValue(objTIniFile.IniReadValue(session, "P2_Name"), objTIniFile.IniReadValue(session, "P2_Value"));
//oRpt.ExportToDisk(CrystalDecisions.Shared.ExportFormatType.Excel, objTIniFile.IniReadValue(session, "ExportPath") + ".xls");
oForm2.Text = session + " " + objTIniFile.IniReadValue(session, "P1_Value") + " " + objTIniFile.IniReadValue(session, "P2_Value");
oForm2.crystalReportViewer1.ReportSource = oRpt;
oForm2.ShowDialog();
}
else
{
oRpt.Load(objTIniFile.IniReadValue(session, "ReportName"));
oRpt.Refresh();
//oRpt.ExportToDisk(CrystalDecisions.Shared.ExportFormatType.Excel, objTIniFile.IniReadValue(session, "ExportPath") + ".xls");
oForm2.Text = session + " " + objTIniFile.IniReadValue(session, "P1_Value") + " " + objTIniFile.IniReadValue(session, "P2_Value");
oForm2.crystalReportViewer1.ReportSource = oRpt;
oForm2.ShowDialog();
}
}
}
,
|
|
|
|
|
Date :
2013-11-08 11:04:41 |
By :
ang89gunner |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
พอจะมี Code ตัวอย่างไหมครับ ว่าต้องทำยังไง
|
|
|
|
|
Date :
2013-11-08 15:22:25 |
By :
ang89gunner |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ติดอยู่ที่เดียวครับ พอรัน process ที่นานๆ แล้วมันจะ ค้าง ทุก Thread เลย ค้างแบบรอให้ อันนานเสร็จก่อน
ไปต่อไม่ได้ T_T
|
|
|
|
|
Date :
2013-11-11 14:09:44 |
By :
ang89gunner |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ช่วยหน่อยครับ
|
|
|
|
|
Date :
2013-11-13 09:01:18 |
By :
ang89gunner |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 02
|