C#使用DateTime.Now静态属性动态获得系统当前日期和时间

目录

一、实例

1.源码

2.生成效果

二、相关知识点

1.Thread类 

(1)Thread.Sleep()方法

(2)Thread(ThreadStart)

(3)IsBackground  

(4)Invoke( )

2.CreateGraphics()

3.DateTime.Now 

4.(MethodInvoker)delegate ()


        使用DateTime结构的Now静态属性可以轻松地获取当前系统时间。

        DateTime结构的Now静态属性只是得到一个系统时间对象,该时间对象不会随着系统时间的变化而变化,如果要动态显示系统时间,可以使用计时器间隔地获取系统时间对象并显示。

        可以适当地使用线程替代Timer控件。在窗体应用程序开发过程中,应当尽量避免使用窗体线程做高强度的运算或IO操作,如果窗体线程参与了过多的运算,会导致用户的操作不能及时分配到资源,用户界面会出现卡或无响应情况。

一、实例

1.源码

//使用DateTime的Now静态属性动态获取系统时间
namespace _053
{public partial class Form1 : Form{public Form1(){InitializeComponent();Load += Form1_Load;}private void Form1_Load(object? sender, EventArgs e){SuspendLayout();// // Form1// AutoScaleDimensions = new SizeF(7F, 17F);AutoScaleMode = AutoScaleMode.Font;ClientSize = new Size(394, 41);Name = "Form1";StartPosition = FormStartPosition.CenterScreen;Text = "动态获取系统时间";         ResumeLayout(false);Thread thread = new(//创建线程() =>                   //使用lambda表达式{while (true)        //无限循环{Invoke(         //操作窗体线程(MethodInvoker)delegate ()//使用匿名方法{Refresh();//刷新窗体Graphics graphics = CreateGraphics(); //创建绘图对象graphics.DrawString("系统时间:" +     //在窗体中绘出系统时间DateTime.Now.ToString("yyyy年MM月dd日 HH时mm分ss秒"),new Font("Times New Roman", 14),Brushes.Blue,new Point(10, 10));});Thread.Sleep(1000);//线程挂起1秒钟}}){IsBackground = true   //将线程设置为后台线程};thread.Start();               //线程开始执行}}
}

2.生成效果

1秒钟一刷新。

二、相关知识点

1.Thread类 

        创建和控制线程,设置其优先级并获取其状态。 

(1)Thread.Sleep()方法

         将当前线程挂起指定的时间。

  • 重载
Sleep(Int32)将当前线程挂起指定的毫秒数。
Sleep(TimeSpan)将当前线程挂起指定的时间。
  •  Sleep(Int32)

        将当前线程挂起指定的毫秒数。

public static void Sleep (int millisecondsTimeout);参数
millisecondsTimeout    Int32
挂起线程的毫秒数。 如果 millisecondsTimeout 参数的值为零,则该线程会将其时间片的剩余部分让给任何已经准备好运行的、具有同等优先级的线程。 如果没有其他已经准备好运行的、具有同等优先级的线程,则不会挂起当前线程的执行。例外
ArgumentOutOfRangeException
超时值为负且不等于 Infinite。
// Sleep(Int32)
// 使用 Sleep 方法来阻止应用程序的main线程。
namespace ConsoleApp12
{class Example{static void Main(){for (int i = 0; i < 5; i++){Console.WriteLine("Sleep for 2 seconds.");Thread.Sleep(2000);}Console.WriteLine("Main thread exits.");}}
}/* 运行结果:
Sleep for 2 seconds.
Sleep for 2 seconds.
Sleep for 2 seconds.
Sleep for 2 seconds.
Sleep for 2 seconds.
Main thread exits.*/
  • Sleep(TimeSpan)        将当前线程挂起指定的时间。
public static void Sleep (TimeSpan timeout);参数
timeout    TimeSpan
挂起线程的时间量。 如果 timeout 参数的值为 Zero,则该线程会将其时间片的剩余部分让给任何已经准备好运行的、具有同等优先级的线程。 如果没有其他已经准备好运行的、具有同等优先级的线程,则不会挂起当前线程的执行。例外
ArgumentOutOfRangeException
的 timeout 值为负,不等于 Infinite 以毫秒为单位,或大于 Int32.MaxValue 毫秒。
// Sleep(TimeSpan)
// 使用 Sleep(TimeSpan) 方法重载来阻止应用程序的main线程五次,每次两秒。
namespace ConsoleApp13
{class Example{static void Main(){TimeSpan interval = new(0, 0, 2);for (int i = 0; i < 5; i++){Console.WriteLine("Sleep for 2 seconds.");Thread.Sleep(interval);}Console.WriteLine("Main thread exits.");}}
}
/* 运行结果:
Sleep for 2 seconds.
Sleep for 2 seconds.
Sleep for 2 seconds.
Sleep for 2 seconds.
Sleep for 2 seconds.
Main thread exits.*/

(2)Thread(ThreadStart)

         初始化 Thread 类的新实例。

public Thread (System.Threading.ThreadStart start);参数
start    ThreadStart
表示开始执行此线程时要调用的方法的 ThreadStart 委托。例外
ArgumentNullException
start 参数为 null。
// Thread(ThreadStart)
// 创建并执行静态方法的线程
namespace ConsoleApp10
{class Test{   static void Main(){Work.DoWork();Thread newthread = new(Work.DoWork);    //创建线程=把要处理的方法放进这个线程Thread newThread = new(new ThreadStart(Work.DoWork));   //等效语句newthread.Start();newThread.Start();}}class Work{      public static void DoWork(){Console.WriteLine("Thread newThread=new()和 newThread.Start()总是成对出现的,");Console.WriteLine("前者负责创建一个新线程,后者负责执行这个线程");}}
}
// 运行结果:
/*
Thread newThread=new()和 newThread.Start()总是成对出现的,
前者负责创建一个新线程,后者负责执行这个线程
Thread newThread=new()和 newThread.Start()总是成对出现的,
前者负责创建一个新线程,后者负责执行这个线程
Thread newThread=new()和 newThread.Start()总是成对出现的,
前者负责创建一个新线程,后者负责执行这个线程*/
// 创建执行实例方法的线程
namespace ConsoleApp11
{class Test{static void Main(){Work threadWork = new(); //创建实例方法Thread newthread = new(Work.DoWork);    Thread newThread = new(new ThreadStart(Work.DoWork));newthread.Start();newThread.Start();}}class Work{public static void DoWork(){Console.WriteLine("Thread newThread=new()和 newThread.Start()总是成对出现的,");Console.WriteLine("前者负责创建一个新线程,后者负责执行这个线程");}}
}
//运行结果:
/*
Thread newThread=new()和 newThread.Start()总是成对出现的,
前者负责创建一个新线程,后者负责执行这个线程
Thread newThread=new()和 newThread.Start()总是成对出现的,
前者负责创建一个新线程,后者负责执行这个线程*/

(3)Thread.IsBackground 属性

        获取或设置一个值,该值指示某个线程是否为后台线程。

public bool IsBackground { get; set; }属性值
Boolean
如果此线程为或将成为后台线程,则为 true;否则为 false。例外
ThreadStateException
线程终止。

// Thread.IsBackground 属性
// 创建前台线程和后台线程,对前台线程和后台线程的行为进行对比。
//  前台线程使进程保持运行,直到完成其 for 循环并终止。
//  由于前台线程已完成执行,因此后台线程将终止进程。
namespace ConsoleApp15
{class Example{static void Main(){BackgroundTest shortTest = new(5);Thread foregroundThread =new(new ThreadStart(shortTest.RunLoop));BackgroundTest longTest = new(50);Thread backgroundThread =new(new ThreadStart(longTest.RunLoop)){IsBackground = true};foregroundThread.Start();backgroundThread.Start();}}class BackgroundTest(int maxIterations){readonly int maxIterations = maxIterations;public void RunLoop(){for (int i = 0; i < maxIterations; i++){Console.WriteLine("{0} count: {1}",Thread.CurrentThread.IsBackground ?"Background Thread" : "Foreground Thread", i);Thread.Sleep(250);}Console.WriteLine("{0} finished counting.",Thread.CurrentThread.IsBackground ?"Background Thread" : "Foreground Thread");}}
}
// 运行结果:
/*
Foreground Thread count: 0
Background Thread count: 0
Background Thread count: 1
Foreground Thread count: 1
Background Thread count: 2
Foreground Thread count: 2
Background Thread count: 3
Foreground Thread count: 3
Background Thread count: 4
Foreground Thread count: 4
Background Thread count: 5
Foreground Thread finished counting.*/

(4)Invoke( )

        详见本文作者发表的其他文章,C#用Parallel.Invoke 方法尽可能并行执行提供的每个操作-CSDN博客  https://wenchm.blog.csdn.net/article/details/135697802

2.CreateGraphics()

3.DateTime.Now 

4.(MethodInvoker)delegate ()

5.TimeSpan(Int32, Int32, Int32)

        将 TimeSpan 结构的新实例初始化为指定的小时数、分钟数和秒数。

(1)定义

public TimeSpan (int hours, int minutes, int seconds);参数
hours    Int32
小时数。minutes    Int32
分钟数。seconds    Int32
秒数。例外
ArgumentOutOfRangeException
参数指定小于 TimeSpanTimeSpan.MinValue 或大于 TimeSpan.MaxValue 的值。注解
将指定的 hours、 minutes和 seconds 转换为时钟周期,该值初始化此实例。

(2)示例

// Example of the TimeSpan( int, int, int ) constructor.
// 创建多个 TimeSpan 对象,该重载将 初始化 TimeSpan 为指定的小时数、分钟数和秒数。
namespace ConsoleApp14
{class TimeSpanCtorIIIDemo{static void CreateTimeSpan(int hours, int minutes,int seconds){TimeSpan elapsedTime = new(hours, minutes, seconds);string ctor = string.Format("TimeSpan( {0}, {1}, {2} )",hours, minutes, seconds); Console.WriteLine("{0,-37}{1,16}",ctor, elapsedTime.ToString());//输出格式}static void Main(){Console.WriteLine("This example of the TimeSpan( int, int, int ) " +"\nconstructor generates the following output.\n");Console.WriteLine("{0,-37}{1,16}", "Constructor", "Value");  //{0,-37}代表左对齐长度不足时空格抵Console.WriteLine("{0,-37}{1,16}", "-----------", "-----");     //{1,16}代表右对齐,长度不足时空格抵CreateTimeSpan(10, 20, 30);CreateTimeSpan(-10, 20, 30);CreateTimeSpan(0, 0, 37230);CreateTimeSpan(1000, 2000, 3000);CreateTimeSpan(1000, -2000, -3000);CreateTimeSpan(999999, 999999, 999999);}}
}
/*
This example of the TimeSpan( int, int, int )
constructor generates the following output.Constructor                                     Value
-----------                                     -----
TimeSpan( 10, 20, 30 )                       10:20:30
TimeSpan( -10, 20, 30 )                     -09:39:30
TimeSpan( 0, 0, 37230 )                      10:20:30
TimeSpan( 1000, 2000, 3000 )              43.02:10:00
TimeSpan( 1000, -2000, -3000 )            40.05:50:00
TimeSpan( 999999, 999999, 999999 )     42372.15:25:39
*/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/242566.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

༺༽༾ཊ—Unity之-01-单例模式—ཏ༿༼༻

在游戏开发过程中&#xff0c;我们会创建各种各样的类&#xff0c;再用new生成实例&#xff0c;有些时候我们需要这个类在整个游戏中是唯一出现的&#xff0c;比如一些管理器比如声音管理器等&#xff0c;没必要创建很多实例&#xff0c;就算有很多模块需要各种声音功能&#x…

为什么国产操作系统是基于linux研发的呢?

为什么国产操作系统是基于linux研发的呢&#xff1f; 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「linux的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&am…

数字IC笔试题——门控时钟与控制信号电平、与门门控、或门门控、上升沿门控、下降沿门控

门控时钟问题。 &#xff08;华为-2019-芯片-数字-34&#xff09; 从后端设计考虑&#xff0c;在必须使用门控时钟的时候&#xff0c;需要遵循一个原则&#xff1a;门控时钟的输出只能跟着时钟信号进行跳变&#xff0c;而不能跟着控制信号进行跳变&#xff0c;也就是说对于用N…

“GPC爬虫池有用吗?

作为光算科技的独有技术&#xff0c;在深入研究谷歌爬虫推出的一种吸引谷歌爬虫的手段 要知道GPC爬虫池是否有用&#xff0c;就要知道谷歌爬虫这一概念&#xff0c;谷歌作为一个搜索引擎&#xff0c;里面有成百上千亿个网站&#xff0c;对于里面的网站内容&#xff0c;自然不可…

【linux驱动】用户空间程序与内核模块交互-- IOCTL和Netlink

创建自定义的IOCTL&#xff08;输入/输出控制&#xff09;或Netlink命令以便用户空间程序与内核模块交互涉及几个步骤。这里将分别介绍这两种方法。 一、IOCTL 方法 1. 定义IOCTL命令 在内核模块中&#xff0c;需要使用宏定义你的IOCTL命令。通常情况下&#xff0c;IOCTL命令…

IDEA在重启springboot项目时没有自动重新build

IDEA在重启springboot项目时没有自动重新build 问题描述 当项目里面某些依赖或者插件更新了&#xff0c;target的class文件没有找到&#xff0c;导致不是我们需要的效果。 只能手动的清理target文件&#xff0c;麻烦得很 &#xff0c; 单体项目还好说&#xff0c;一次清理就…

pycharm import torch

目录 1 安装 2 conda环境配置 3 测试 开始学习Pytorch! 1 安装 我的电脑 Windows 11 Python 3.11 Anaconda3-2023.09-0-Windows-x86_64.exe cuda_11.8.0_522.06_windows.exe pytorch &#xff08;管理员命令行安装&#xff09; pycharm-community-2023.3.2.exe 2 c…

代码随想录 Leetcode150. 逆波兰表达式求值

题目&#xff1a; 代码(首刷看解析 2024年1月21日&#xff09;&#xff1a; class Solution { public:int evalRPN(vector<string>& tokens) {stack<long long> st; for (int i 0; i < tokens.size(); i) {if (tokens[i] "" || tokens[i] &qu…

css绘制下拉框头部三角(分实心/空心)

1:需求图: 手绘下拉框 带三角 2:网上查了一些例子,但都是实心的, 可参考,如图: (原链接: https://blog.csdn.net/qq_33463449/article/details/113375804) 3:简洁版的: a: 实心: <view class"angle"/>.angle{width:0;height:0;border-left: 10px solid t…

力扣每日一题---1547. 切棍子的最小成本

//当我们将棍子分段之后&#xff0c;我们是不是想到了怎么组合这些棍子 //并且这些棍子有一个性质就是只能与相邻的进行组合 //暴力搜索的话复杂度很高 //在思考暴力搜索的时候&#xff0c;我们发现一个规律 //比如棍子长度1 2 1 1 2 //那么与最后一个2组合的棍子有&#xff0c…

【网络安全】-入门版

secure 一、基本工具1、metasploit framework ps.本着兴趣爱好&#xff0c;加强电脑的安全防护能力&#xff0c;并严格遵守法律和道德规范。一、基本工具 1、metasploit framework msf&#xff08;metasploit framework&#xff09;是一个开源的渗透测试框架&#xff0c;用于…

Qt QCustomPlot 绘制子轴

抄大神杰作&#xff1a;QCustomplot&#xff08;五&#xff09;QCPAxisRect进行子绘图-CSDN博客文章浏览阅读5.9k次&#xff0c;点赞7次&#xff0c;收藏60次。文中介绍了QCustomPlot 子绘图需要掌握的类&#xff0c;也就是Matlab中的subplot&#xff0c;最后给出了一个完整的例…

Flash读取数据库中的数据

Flash读取数据库中的数据 要读取数据库的记录&#xff0c;首先需要建立一个数据库&#xff0c;并输入一些数据。数据库建立完毕后&#xff0c;由Flash向ASP提交请求&#xff0c;ASP根据请求对数据库进行操作后将结果返回给Flash&#xff0c;Flash以某种方式把结果显示出来。 …

flink基础概念之什么是时间语义

什么是时间语义 Flink支持三种不同的时间语义&#xff0c;以便处理流式数据中的事件时间、处理时间和摄入时间。 1. 处理时间&#xff08;Processing Time&#xff09; 处理时间的概念非常简单&#xff0c;就是指执行处理操作的机器的系统时间。 在这种时间语义下处理窗口非…

算法练习-替换数字(思路+流程图+代码)

难度参考 难度&#xff1a;简单 分类&#xff1a;字符串 难度与分类由我所参与的培训课程提供&#xff0c;但需要注意的是&#xff0c;难度与分类仅供参考。以下内容均为个人笔记&#xff0c;旨在督促自己认真学习。 题目 给定一个字符串S,它包含小写字母和数字字符&#xff0…

图论:最短路(dijkstra算法、bellman算法、spfa算法、floyd算法)详细版

终于是学完了&#xff0c;这个最短路我学了好几天&#xff0c;当然也学了别的算法啦&#xff0c;也是非常的累啊。 话不多说下面看看最短路问题吧。 最短路问题是有向图&#xff0c;要求的是图中一个点到起点的距离&#xff0c;其中我们要输入点和点之间的距离&#xff0c;来求…

2024年【金属非金属矿山(地下矿山)安全管理人员】证考试及金属非金属矿山(地下矿山)安全管理人员模拟考试题库

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年【金属非金属矿山&#xff08;地下矿山&#xff09;安全管理人员】证考试及金属非金属矿山&#xff08;地下矿山&#xff09;安全管理人员模拟考试题库&#xff0c;包含金属非金属矿山&#xff08;地下矿山&…

Spring DI

目录 什么是依赖注入 属性注入 构造函数注入 Setter 注入 依赖注入的优势 什么是依赖注入 依赖注入是一种设计模式&#xff0c;它通过外部实体&#xff08;通常是容器&#xff09;来注入一个对象的依赖关系&#xff0c;而不是在对象内部创建这些依赖关系。这种方式使得对象…

复现PointNet++(语义分割网络):Windows + PyTorch + S3DIS语义分割 + 代码

一、平台 Windows 10 GPU RTX 3090 CUDA 11.1 cudnn 8.9.6 Python 3.9 Torch 1.9.1 cu111 所用的原始代码&#xff1a;https://github.com/yanx27/Pointnet_Pointnet2_pytorch 二、数据 Stanford3dDataset_v1.2_Aligned_Version 三、代码 分享给有需要的人&#xf…

wsl利用netsh端口转发实现http代理

1、端口转发 netsh interface portproxy add v4tov4 listenaddress192.168.1.102 listenport10086 connectaddress127.0.0.1 connectport99992 端口检查 上面命令执行完成后&#xff0c;检查命令是否执行成功 netsh interface portproxy show all检查端口是否正常监听 nets…