C# 用C设置睡眠时间#

C# 用C设置睡眠时间#,c#,sleep,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);
}
我不知道该怎么做。我试图在我的代码中添加如下内容:

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#Console应用程序。

线程代码应该运行循环

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

线程代码应该运行一个循环

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

你走对了方向,试试这样的方法:

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    
  }
}

你走对了方向,试试这样的方法:

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    
  }
}

为什么不用定时器呢?比如:

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.
}
但是您需要一个像表单这样的应用程序来持续运行。 i、 e.
Application.Run(您的对象)

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


但是我认为使用计时器是一种方法。

为什么不使用计时器呢?比如:

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.
}
但是您需要一个像表单这样的应用程序来持续运行。 i、 e.
Application.Run(您的对象)

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


但我认为使用计时器是一种方法。

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

其次,在两分钟结束后,您没有将再次调用SendData的循环

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


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

其次,在两分钟结束后,您没有将再次调用SendData的循环

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


我支持使用计时器,特别是如果您确实希望有一个固定的时间间隔,而不考虑实际发送数据所需的时间,或者您希望明确控制行为,如果您无法在时间间隔内完成任务,会发生什么情况。

我支持使用计时器,特别是如果您确实希望有一个固定的时间间隔,而不考虑实际发送数据所需的时间,或者您希望明确控制行为,如果无法在该时间间隔内完成任务会发生什么。

为此,您应该使用System.Threading.Timer(无需messageloop)。但是,由于Main()没有做任何其他事情,所以这并不重要。为此,您应该使用System.Threading.Timer(不需要messageloop)。但是,由于Main()没有做任何其他事情,所以这一点都不重要。