Thread.Sleep(10000) 调试起作用, 直接运行不起作用? private void Form1_Load(object sender, EventArgs e)
        {
               System.Timers.Timer t = new System.Timers.Timer();
            t.Interval = ConvertToint(sss[2]);//int.Parse(sss[2]);              t.Elapsed += new System.Timers.ElapsedEventHandler(jihuadata);
            t.AutoReset = true;
            t.Enabled = true;         
        }
   private void jihuadata(object sender, System.Timers.ElapsedEventArgs e)
        {            db lists = new db();
            DataSet ss = new DataSet();
                       \\
.......
     \\
            
                     String sql01 = "select a.checi,a.kaidian,a.chuqinshijian,a.jiche,a.sijigonghao,a.sijiming,a.fusijigonghao,a.fusijiming from z_jcyy_jihua a,z_jcyy_yuangong b where a.sijigonghao=b.gonghao and b.chejianid='" + sss[5] + "' and to_char(a.kaidian,'yyyy-mm-dd HH24:mmi:ss')>='" + RQ + " " + tt1 + "' and to_char(a.kaidian,'yyyy-mm-dd HH24:mi:ss')<='" + RQ + " " + tt + "' and to_char(a.chuqinshijian,'yyyy-mm-dd')='" + RQ + "' and a.sijigonghao is not null and a.sijigonghao not in (" + sjm + ") and a.cqddid='" + sss[0] + "' order by a.kaidian ";
            ss = lists.Oraclesql(sql01);            Control.CheckForIllegalCrossThreadCalls = false;            if (ss.Tables[0].Rows.Count != 0)
            {
                Form1.PlayWav("tishi.wav");
                foreach (DataRow row in ss.Tables[0].Rows)
                {
                    if (neir == "")
                    {
                                               neir = "  现在时刻 " + tt1.Substring(0,5) + "    gg " + publicfunction.zfzh(row["sijigonghao"].ToString()) + " " + publicfunction.zfkg(row["sijiming"].ToString().Trim());
                        neir += sss[3];
                        tbspeech.Text = neir;
                        speech.Speak(tbspeech.Text, SpeechVoiceSpeakFlags.SVSFlagsAsync);
                                          }
                    else
                    {
    
                           neir = "\r\n" + "  ffff " + publicfunction.zfzh(row["sijigonghao"].ToString()) + " " + publicfunction.zfkg(row["sijiming"].ToString().Trim());
                        neir += sss[3]; 
                        tbspeech.Text = neir;
                        Thread.Sleep(ConvertToint(sss[4]));   //毫秒
                        speech.Speak(tbspeech.Text, SpeechVoiceSpeakFlags.SVSFlagsAsync);
                        
                    }
                }               
            }
        }

解决方案 »

  1.   

    timer 是会另起线程执行委托事件的,也就是说你的主线程可能看不出效果,但是 Thread.Sleep(ConvertToint(sss[4])); //毫秒
    是执行过的。你可以通过写日志的方式跟踪一下
      

  2.   

    调试时  Thread.Sleep(ConvertToint(sss[4])); //毫秒ConvertToint(sss[4])) 值100000
     断点确实停了10秒 ;直接运行不设置断点,   却没有停10秒。
      

  3.   

    xfreyes:
      主线程怎样才能有效果? 代码怎么改?
      

  4.   

    Thread.Sleep(ConvertToint(sss[4])); //毫秒前后分别加句话  往log里写当前时间
    不过,你的问题 你没描述清楚,Thread.Sleep 是会执行的
      

  5.   

    Sandy945:
        前后分别加句话 往log里写当前时间
       加哪句呢?
      

  6.   

    当前时间输出到日志
    Thread.Sleep(ConvertToint(sss[4])); 
    当前时间输出到日志
    -------------------这样你就知道休眠了没有
      

  7.   

    要不这样吧,sleep前,你加一个messagebox提示开始时间,sleep后也加一个messagebox提示结束时间,看看是否真的运行没效果,还是根本就没走到sleep这一步,
      

  8.   

    谢谢楼上各位,自己解决了。Thread.Sleep(ConvertToint(sss[4])); //毫秒 加到前面循环中就好了。