_sendThread 发送邮件的线程要求:当我发了2分钟时,暂停8分钟。并循环运行下去if (_sendThread.ThreadState == ThreadState.Running)
                {
                    _sendThread.Suspend();
                }
                Thread.Sleep(480000);
                _sendThread.Resume();
当暂停时,form窗体变白了,并且最小化的时候不能还原回来!等到正常发送邮件的时候,又好了!怎么解决!!!!!谢谢了

解决方案 »

  1.   

    你这段代码写在哪里的?
    写在窗体里面,自然就SLEEP了480秒...
      

  2.   

    System.Threading.Thread.CurrentThread.Suspend();  
        
      可能你指的暂停执行是指的一个特定业务逻辑吧,如果是这样,你可以将它放到一个单独的线程中,然后你就可以通过上面这个函数进行控制了。  
      Thread  th;...  
      th.Suspend()//暂停  
      th.Resume()//继续 
      

  3.   

    同意楼上
    你是把主线程sleep了,这样主线程sleep480秒,所以会出现你说的那种情况。
      

  4.   

    楼上的说的对,楼主说窗体会假死,证明Thread.Sleep(480000)放在主线程下,需要暂停子线程才行~
      

  5.   

    用System.Threading.Timer比较合适吧。
      

  6.   

    我昨天刚遇到过。你的_sendThread是不是完全独立于窗体?
    如果你的_sendThread会有与窗体关联的参数等等,就要把你处理的事情放到新线程YourThread里边。
    窗体里要做的事情就是管理YourThread。这样就不会影响窗体了。
      

  7.   


    重新定义新的线程,进行sleep
      

  8.   

    重新定义新的线程,进行sleep 不要把主线程sleep了
      

  9.   

    子线程好像没有sleep方法啊!!!
      

  10.   

    主线程:               
     proc = new BrowserProcess(this,_EventThreadStopped,FileListResult,web,Path);
    thread = new Thread(proc.AccessMain);//调用子线程方法
    thread.Start();

    public void AccessMain()
    {
    threadSize = href.Count / (fMain.threadcount);//计算每个线程要处理的条数
    if (threadSize < 1)
    {
    return;
    }
    threads = new Thread[fMain.threadcount]; for (int count = 0; count < threads.Length; count++)
    {
    threads[count] = new Thread(new ParameterizedThreadStart(CreateUrl));
    threads[count].IsBackground = true;
    threads[count].Start(count);
    Thread.Sleep(200);
    }

    }
      

  11.   


    如果lz Sleep在窗体线程中,窗体不变白谁变白呢。
    应该让主线程调用子线程,子线程单独Sleep,不影响主线程。
      

  12.   

    如果不使用子线程,用Timer控件也可以,很好用,不影响执行效率。
      

  13.   

    我很啰嗦,再补充一点。
    Thread.Sleep(480000);我建议写成 Thread.Sleep(8*60*1000);
    提高可读性,不用算,一看就是8分钟。