0

我有这个代码:

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            BackgroundWorker worker = sender as BackgroundWorker;
            while (true)
            {

                if ((worker.CancellationPending == true))
                {
                    e.Cancel = true;
                    break;
                }
                else
                {



                    string content = downloadContent();
                    if (InvokeRequired)
                    {
                        BeginInvoke(new Action(() => textBox1.Text = content), null);
                    }

                    GetProfileNames(content);
                    GetTextFromProfile(content);


                    reader.Close();
                    response.Close();
                    Thread.Sleep(30000);
                }
            }
        }

和下载内容功能:

private string downloadContent()
        {
            WebRequest request = WebRequest.Create(testingUrl);
            request.Method = "GET";
            response = request.GetResponse();
            Stream stream = response.GetResponseStream();
            reader = new StreamReader(stream);
            string content = reader.ReadToEnd();
            return content;
        }

我需要每 30 秒它会像现在一样下载一个新内容,存储之前的旧内容,并将新下载的内容与之前下载的内容进行比较。

如果它们相同,则不要做任何事情,如果它们不相同,请做某事。

4

2 回答 2

1

使用 .NET 中的计时器类之一。

System.Timers.Timer如果您不在 winforms 上,这是一个不错的选择,但您需要了解它将在自己的线程上运行。

var timer = new Timer(30000); // Interval of 30 seconds
timer.Elapsed = OnTimedEvent;
timer.Start();

private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
    // Update logic here.
}
于 2012-08-11T19:02:19.143 回答
0

保留一个变量来存储最后的内容。这个变量应该放在 BGWorker DoWork 方法之外。

string LastContent = "";

然后,在这一行下:

string content = downloadContent();

添加这些以查看它们是否相同:

if (content == LastContent)
{
   e.Cancel=true;
   LastContent=content;
   break;
}
else
{
   //Do something if they are not equal.
} 
于 2012-08-11T19:06:24.880 回答