在C#中设置睡眠时间

时间:2009-07-30 17:29:44

标签: c# sleep

我想每两分钟发送一次数据。

现在,我有以下代码:

using (var client = new WebClient())
{
    byte[] responseArray = client.UploadValues(Server, myNameValueCollection);
    Answer = Encoding.ASCII.GetString(responseArray);
}

我不知道怎么能这样做。我试着在我的代码中添加这样的东西:

private void SendData()
{ 
    ...

    using (var client = new WebClient())
    {
        byte[] responseArray = client.UploadValues(Server, myNameValueCollection);
        Answer = Encoding.ASCII.GetString(responseArray);
    }
}

并致电:

public void main(object sender, EventArgs e)
{
    Thread iThread = new Thread(new ThreadStart(SendData));
    iThread.Start();
    iThread.Sleep();
}

但没有运气。我的程序是C#控制台应用程序。

5 个答案:

答案 0 :(得分:4)

您的线程代码应该运行循环

while (true)
{
    ....
    Thread.Sleep(120*1000);
} 

答案 1 :(得分:4)

为什么不使用计时器?类似的东西:

using System.Timers;

System.Timers.Timer t1 = new System.Timers.Timer(2*60*1000  /*2mins interval*/);
t1.Elapsed += new System.Timers.ElapsedEventHandler(t1_Elapsed);
t1.Start();

void t1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
  //Do your stuff.
}

但是你需要像表单这样的应用程序才能持续运行。 即Application.Run(YourObject);

或者创建一个表单而不是控制台并隐藏表单。 (不是最好的方式。)

但我认为使用计时器是可行的方法。

答案 2 :(得分:3)

首先,你在原始线程上调用Thread.Sleep()...而不是你刚创建和启动的那个。

其次,你没有在两分钟后再次调用SendData的循环。

您可能希望查看用户的计时器,而不是尝试使用您自己的代码设置两分钟的循环间隔...

Timer Class (System.Threading)

答案 3 :(得分:2)

你走在正确的轨道上,尝试这样的事情:

public void Main(..)
{
  new Thread(new ThreadStart(SendData)).Start();
}

public void SendData()
{
  while(true)
  {
    using (var client = new WebClient())
    {
      byte[] responseArray = client.UploadValues(Server, myNameValueCollection);
      Answer =   Encoding.ASCII.GetString(responseArray);
    }

    Thread.Sleep(120000);  // sleep for 2 mins between cycles    
  }
}

答案 4 :(得分:0)

我第二次使用计时器,特别是如果你确实需要一个固定的间隔而不管你实际发送数据所需的时间,或者你想明确地控制行为如果你无法完成任务会发生什么在这段时间内。