【问题标题】:How to change label text every x seconds with a timer如何使用计时器每 x 秒更改一次标签文本
【发布时间】:2019-07-18 13:05:02
【问题描述】:

我想每 5000 毫秒更新一次表单中标签的文本,我一直在尝试使用计时器,但它不起作用,我不知道为什么。这是我正在使用的代码:

private void Form1_Load(object sender, EventArgs e)
{
    openRequests();

    System.Timers.Timer aTimer = new System.Timers.Timer();
    aTimer.Elapsed += new System.Timers.ElapsedEventHandler(OnTimedEvent);
    aTimer.Interval = 20000;
    aTimer.Enabled = true;
}
private  void  OnTimedEvent(object source, ElapsedEventArgs e)
{
    codeComboBox.Items.Clear();
    try
    {
        connectionDB.Open();
        String query = "";
        query = "SELECT GMKEY0 FROM SAM_FILNAS.EGESM1F0 WHERE GMSTX0 = '0' OR GMSTX0 = 'P' ";
        daMAT = new OleDbDataAdapter(query, connectionDB);
        dsMAT = new System.Data.DataSet();
        daMAT.Fill(dsMAT, "sam_filnas.EGESM1F0 ");
        foreach (System.Data.DataTable t in dsMAT.Tables)
        {
            foreach (System.Data.DataRow r in t.Rows)
            {
                codeComboBox.Items.Add(r["GMKEY0"]);
            }
        }
    }
    catch (Exception exc)
    {
        MessageBox.Show("non riesco a scaricare le richieste di manutenzione aperte");
    }
    label7.Text = "CI SONO " + codeComboBox.Items.Count.ToString() + " RICHIESTE DI MANUTENZIONE";
    connectionDB.Close();
    //updateTimer.Start();
    resertAllTheControls();
}

计时器启动,每 5 秒调用一次 onTimeEvent 方法,但由于某种原因,该方法的执行似乎在 codeComboBox.Items.Clear(); 处停止

请解释一下为什么会这样。

【问题讨论】:

  • 删除codeComboBox.Items.Clear();是否有效?

标签: c# .net winforms timer controls


【解决方案1】:

不要使用System.Timers.Timer。请改用System.Windows.Forms.Timer

Elapsed 在 ThreadPool 线程上执行,这意味着您在尝试更改 UI 上的内容时必须使用 Invoke,因为 UI 有自己的线程。

System.Windows.Forms.TimerTick 事件发生在 UI 线程上,因此不需要任何特殊代码来处理其事件处理程序中的 UI 元素。

System.Timers.Timer 在内部使用 System.Threading.Timer。 来自System.Threading.Timer 文档页面的Remarks 段落:

System.Threading.Timer 是一个简单的轻量级计时器,它使用回调方法并由线程池线程提供服务。
不建议与 Windows 窗体一起使用,因为它的回调不会发生在用户界面线程上。
System.Windows.Forms.Timer 是与 Windows 窗体一起使用的更好选择。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-16
    相关资源
    最近更新 更多