winforms c#使用传回和计时器

eoigrqb6  于 2022-11-16  发布在  C#
关注(0)|答案(1)|浏览(187)

我对C#很陌生,我正在尝试练习。但是用这种方法,时间和日期信息只有一次我认为是因为返回。在这种情况下我该怎么办?

private void startBtn_Click(object sender, EventArgs e)
    {           
            System.Timers.Timer timer = new System.Timers.Timer();
            timer.Interval = 1000;
            timer.Elapsed += timer_Elapsed;
            timer.Start();
    }

 public string google_date()
    {
        var myHttpWebRequest = (HttpWebRequest)WebRequest.Create("http://google.com");
        var response = myHttpWebRequest.GetResponse();
        string todaysDates = response.Headers["date"];
        return DateTime.ParseExact(todaysDates, "ddd, dd MMM yyyy HH:mm:ss 'GMT'", CultureInfo.InvariantCulture.DateTimeFormat, DateTimeStyles.AssumeUniversal).ToString();            
    }


    void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    {
        //google_date();
        Console.WriteLine("Google Date Info: " + google_date().ToString());

    }
nue99wik

nue99wik1#

您需要稍微修改代码。
1.不要在一个时间间隔内两次调用google_date(),而是将日期值存储在一个可以再次访问的变量中。
1.您需要替换WebRequest.Create函数,因为它已过时请改用HttpClient
1.返回相对于UTC的日期值。
1.如果您想要在UI控件中显示值,可以使用下列范例来避免cross-thread operation not valid例外状况。

范例:

bool isTimerActive = false;

private void startBtn_Click(object sender, EventArgs e)
{
    // Only run timer one
    if (isTimerActive == false)
    {
        System.Timers.Timer timer = new System.Timers.Timer();
        timer.Interval = 1000;
        timer.Elapsed += timer_Elapsed;
        timer.Start();
        isTimerActive = true;
    }
}

void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
    var date = google_date().Value.ToString("ddd, dd MMM yyyy HH:mm:ss 'GMT'");
    if (textBox1.InvokeRequired)
    {
        textBox1.Invoke(new MethodInvoker(delegate
        {
            textBox1.Text += date + Environment.NewLine;
        }));
    }
}

public static DateTimeOffset? google_date()
{
    using (var client = new HttpClient())
    {
        try
        {
            var result = client.GetAsync("https://google.com",
                  HttpCompletionOption.ResponseHeadersRead).Result;
            return result.Headers.Date;
        }
        catch
        {
            return null;
        }
    }
}

输出:

相关问题