c# 多线程界面卡顿_C# Winform使用线程,委托定时更新界面UI控件,解决界面卡顿问题...

本文通过创建后台线程并使用System.Timers.Timer定时器,配合委托来更新界面UI控件,避免了主线程因频繁操作而出现的卡顿现象。在Form1_Load事件中启动新线程,定时器每隔1秒触发,调用SetData和ShowMessage方法更新label1的文本和txtbox的内容,确保UI操作在正确的线程中进行。
摘要由CSDN通过智能技术生成

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Data.SqlClient;

using System.Drawing;

using System.Linq;

using System.Net;

using System.Net.Sockets;

using System.Text;

using System.Threading;

using System.Threading.Tasks;

using System.Windows.Forms;

namespace SampleNotice

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

private void Form1_Load(object sender, EventArgs e)

{

Thread t = new Thread(new ThreadStart(GetData));

t.IsBackground = true;

t.Start();

}

private void GetData()

{

var timer = new System.Timers.Timer();

timer.Interval = 1000;

timer.Enabled = true;

timer.AutoReset = true;//设置是执行一次(false)还是一直执行(true);

timer.Start();

timer.Elapsed += (o, a) =>

{

SetData();

ShowMessage(string.Format("更新时间:" + DateTime.Now));

};

}

//声明委托

private delegate void SetDataDelegate();

private void SetData()

{

if (this.InvokeRequired)

{

this.Invoke(new SetDataDelegate(SetData));

}

else

{

label1.Text = string.Format("更新时间:" + DateTime.Now);

}

}

//声明委托

private delegate void ShowMessageDelegate(string message);

private void ShowMessage(string message)

{

if (this.InvokeRequired)

{

ShowMessageDelegate showMessageDelegate = ShowMessage;

this.Invoke(showMessageDelegate, new object[] { message });

}

else

{

txtbox.Text = message;

}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值