using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace w00窗体程序运行时间显示
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
DateTime G_Datetime = DateTime.Now;
Thread thread = new Thread(() =>
{
while (true)
{
TimeSpan timeSpan = DateTime.Now - G_Datetime;
//MethodInvoker不带参数的委托,用来访问控件
//MethodInvoker,用于跨线程访问,它是一个委托,允许调用者将方法返回到UI线程(处理用户界面事件的线程)中,跨线程执行应用程序非常重要
//MethodInvoker,当需要执行一些较长时间运行的任务时,我们通常会创建一个新的工作线程,然而在完成任务后,我们必须将结果返回到ui线程中,以便更新用户界面,
//这就是MethodInvoker的作用,
//主要功能就是,将调用的方法,返回到UI线程中,确保线程安全,在ui线程中运行代码的好处是,它可以确保在用户界面上进行,所有的更改都得到正确的更新和呈现
Invoke((MethodInvoker)(() =>
{
label1.Text = $"系统已运行:{timeSpan.Days}天{timeSpan.Hours}时{timeSpan.Minutes}分{timeSpan.Seconds}秒";
/*string.Format("系统已运行:{0}天{1}时{2}分{3}秒",timeSpan.Days,timeSpan.Hours,timeSpan.Minutes,timeSpan.Seconds);*/
}));
Thread.Sleep(1000);
}
}
);
thread.IsBackground = true;
thread.Start();
}
}
}
C#窗体程序运行时间显示及线程的使用和MethodInvoker
最新推荐文章于 2023-10-25 13:23:25 发布