欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【C#】更新界面显示并解决this.Invoke无法访问已释放的对象

程序员文章站 2022-06-10 16:33:44
...

比如我在当前线程中要实时更新界面显示时间为当前时间

//声明定时器
private System.Timers.Timer timer1;
//设置定时器 (在Load里设置)
timer1 = new System.Timers.Timer(1000);//实例化Timer类,设置间隔时间为1000毫秒;
timer1.Elapsed += new System.Timers.ElapsedEventHandler(timer1_Elapsed);//到达时间的时候执行事件;
timer1.AutoReset = true;//设置是执行一次(false)还是一直执行(true);
timer1.Enabled = true;//是否执行System.Timers.Timer.Elapsed事件;
private void timer1_Elapsed(object source, System.Timers.ElapsedEventArgs e)
{
    //更新界面
    this.Invoke((EventHandler)(delegate
    {
        try
        {
            TimeNow.Text = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");                    
        }
        catch
        {
        }
    }));
}

关闭页面的时候请注意这种写法 避免出现无法访问已释放的对象

//FormClosing事件 先停下定时器
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    timer1.Stop();
}

//FormClosed事件 彻底关闭程序
private void Form1_FormClosed(object sender, FormClosingEventArgs e)
{
    System.Environment.Exit(0);
}