- 01 private void timer1_Tick(object sender, EventArgs e)
- 02 {
- 03 //创建一个新的子线程,用于检索和提示数据,以减轻主线程的压力
- 04 Thread th = new Thread(
- 05 () =>
- 06 {
- 07 Invoke(
- 08 (MethodInvoker)(() => //在当前窗体的线程上执行指定的委托
- 09 {
- 10 int intDays; //存储提前天数
- 11 OleDbDataAdapter oleDa = new OleDbDataAdapter("Select Days from tb_CueSetting", oleConn); //创建实例,读取提前天数
- 12 DataTable dt = new DataTable(); //创建DataTable实例
- 13 oleDa.Fill(dt); //把数据写入DataTable实例中
- 14 //获取提前天数
- 15 intDays = Convert.ToInt32(dt.Rows[0][0]);
- 16 //创建动态SQL字符串,读取将要执行的计划信息
- 17 StringBuilder sb = new StringBuilder(" Select PlanTitle from tb_Plan Where ");
- 18 //过滤日期符合查询条件的记录
- 19 string strSql = " DoFlag = '0' and (format(ExecuteTime,'yyyy-mm-dd') >= '" + DateTime.Today.ToString("yyyy-MM-dd") + "' and format(ExecuteTime,'yyyy-mm-dd') <= '" + DateTime.Today.AddDays(intDays).ToString("yyyy-MM-dd") + "')";
- 20 sb.Append(strSql); //追加字符串
- 21 //得到新的OleDbDataAdapter实例
- 22 oleDa = new OleDbDataAdapter(sb.ToString(), oleConn);
- 23 oleDa.Fill(dt); //把数据写入DataTable实例中
- 24 sb.Clear(); //清空动态字符串
- 25 foreach (DataRow dr in dt.Rows)//遍历数据行,追加多条计划信息
- 26 {
- 27 //追加字符串(包括一个换行符)
- 28 sb.Append(dr["PlanTitle"].ToString() + Environment.NewLine);
- 29 }
- 30 //若存在将要执行的计划
- 31 if (!String.IsNullOrEmpty(sb.ToString().Trim()))
- 32 {
- 33 string strTemp = string.Empty; //定义存储提示信息的字符串变量
- 34 if (intDays == 0) //若是当天内
- 35 {
- 36 strTemp = "今天有以下未执行的计划任务:";
- 37 }
- 38 else //若不是当天,而是以后几天内
- 39 {
- 40 strTemp = "未来" + intDays + "天内有以下未执行的计划任务:";
- 41 }
- 42 this.notifyIcon1.ShowBalloonTip(1000, "计划提示:",strTemp + sb.ToString() + "详细情况请单击托盘图标!", ToolTipIcon.Info); //弹出提示气泡,显示1秒钟
- 43 }
- 44 else //若不存在将要执行的计划
- 45 {
- 46 string strTemp = string.Empty; //定义存储提示信息的字符串变量
- 47 if (intDays == 0) //若是当天内
- 48 {
- 49 strTemp = "今天无未执行的计划任务:";
- 50 }
- 51 else //若是未来几天内
- 52 {
- 53 strTemp = "未来" + intDays + "天内无未执行的计划任务:";
- 54 }
- 55 this.notifyIcon1.ShowBalloonTip(1000, "计划提示:", strTemp + "\n详细情况请单击托盘图标!", ToolTipIcon.Info); //弹出提示气泡,显示1秒钟
- 56 }
- 57 }));
- 58 });
- 59 th.IsBackground = true; //设置新的子线程在后台执行
- 60 th.Start(); //启动新的子线程
- 61 }
使用多线程处理弹出"提示气泡"任务
最新推荐文章于 2024-08-23 08:53:24 发布