1

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

现在,我有以下代码:

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# 控制台应用程序。

4

5 回答 5

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);

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

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

于 2009-07-30T17:35:21.347 回答
4

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

while (true)
{
    ....
    Thread.Sleep(120*1000);
} 
于 2009-07-30T17:32:08.467 回答
3

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

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

您可能想查看用户 Timer 而不是尝试使用您自己的代码设置两分钟的循环间隔......

定时器类(System.Threading)

于 2009-07-30T17:35:57.850 回答
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    
  }
}
于 2009-07-30T17:33:09.603 回答
0

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

于 2009-07-30T17:50:06.513 回答