1

2分ごとにデータを送信したい。

現在、次のコードがあります。

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

スレッドコードはループを実行する必要があります

while (true)
{
    ....
    Thread.Sleep(120*1000);
} 
于 2009-07-30T17:32:08.467 に答える
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 に答える
3

1つは、作成して開始したばかりのスレッドではなく、元のスレッドでThread.Sleep()を呼び出していることです。

次に、2分が経過した後にSendDataを再度呼び出すループはありません。

独自のコードで2分のループ間隔を設定するのではなく、ユーザーにタイマーを調べたい場合があります...

タイマークラス(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 に答える