一个多线程的有关问题 ,小弟我个人感觉绝对属于C#的bug,当然也可能是小弟我本身能力太逊,请大家看看,出出主意
一个多线程的问题 ,我个人感觉绝对属于C#的bug,当然也可能是我本身能力太逊,请大家看看,出出主意
之前有个报表的程序,其中有一张报表速度比较慢。所以就加了个多线程。代码大致如下,有个query函数,然后我加了个thread指向他 tempt = new Thread(new ThreadStart(Query)); query函数里面是个while循环,
如下,其中根据 combo_ReportType的值 去做case when
代码如下
while (true)
{
btn_query.Enabled = false;
this.dgv_Report.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
String ReportSql = string.Empty;
switch (combo_ReportType.Text)
{
case "":
MessageBox.Show("请选择一个确定的报表!");
break;
case "急诊就诊量统计":
ReportSql = "ReportEmergencyMentimes " + dt_Start.Value.Year.ToString();
break;
case "急诊就诊量统计按日统计":
ReportSql = "ReportEmergencyMentimesByDays " + dt_Start.Value.Year.ToString() + "," + dt_Start.Value.Month.ToString();
break;
case "急诊留观病人信息表":
ReportSql = "OutComeReport " + SqlProcess.SqlProcess.Blank(dt_Start.Value.ToShortDateString()) + "," + SqlProcess.SqlProcess.Blank(dt_End.Value.AddDays(1).ToShortDateString());
break;
case "急诊死亡病人信息表":
this.dgv_Report.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
ReportSql = "DeathReport " + SqlProcess.SqlProcess.Blank(dt_Start.Value.ToShortDateString()) + "," + SqlProcess.SqlProcess.Blank(dt_End.Value.AddDays(1).ToShortDateString());
break;
case "急诊留观汇总报表":
ReportSql = "OutComeReportHZ " + SqlProcess.SqlProcess.Blank(dt_Start.Value.ToShortDateString()) + "," + SqlProcess.SqlProcess.Blank(dt_End.Value.AddDays(1).ToShortDateString());
break;
default:
break;
}
if (String.IsNullOrEmpty(ReportSql) == false)
{
RefreshGrid(ReportSql, "");
}
if (dgv_Report.Columns.Contains("deptid"))
之前有个报表的程序,其中有一张报表速度比较慢。所以就加了个多线程。代码大致如下,有个query函数,然后我加了个thread指向他 tempt = new Thread(new ThreadStart(Query)); query函数里面是个while循环,
如下,其中根据 combo_ReportType的值 去做case when
代码如下
while (true)
{
btn_query.Enabled = false;
this.dgv_Report.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
String ReportSql = string.Empty;
switch (combo_ReportType.Text)
{
case "":
MessageBox.Show("请选择一个确定的报表!");
break;
case "急诊就诊量统计":
ReportSql = "ReportEmergencyMentimes " + dt_Start.Value.Year.ToString();
break;
case "急诊就诊量统计按日统计":
ReportSql = "ReportEmergencyMentimesByDays " + dt_Start.Value.Year.ToString() + "," + dt_Start.Value.Month.ToString();
break;
case "急诊留观病人信息表":
ReportSql = "OutComeReport " + SqlProcess.SqlProcess.Blank(dt_Start.Value.ToShortDateString()) + "," + SqlProcess.SqlProcess.Blank(dt_End.Value.AddDays(1).ToShortDateString());
break;
case "急诊死亡病人信息表":
this.dgv_Report.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
ReportSql = "DeathReport " + SqlProcess.SqlProcess.Blank(dt_Start.Value.ToShortDateString()) + "," + SqlProcess.SqlProcess.Blank(dt_End.Value.AddDays(1).ToShortDateString());
break;
case "急诊留观汇总报表":
ReportSql = "OutComeReportHZ " + SqlProcess.SqlProcess.Blank(dt_Start.Value.ToShortDateString()) + "," + SqlProcess.SqlProcess.Blank(dt_End.Value.AddDays(1).ToShortDateString());
break;
default:
break;
}
if (String.IsNullOrEmpty(ReportSql) == false)
{
RefreshGrid(ReportSql, "");
}
if (dgv_Report.Columns.Contains("deptid"))