c# 延时 不占用cpu,窗口不卡死,不影响其它代码执行

本文介绍了如何在C#中利用SetWaitableTimer和CreateWaitableTimer创建一个不会占用CPU且不会导致窗口卡死的延时方法。在等待期间,程序将转让Windows权限,确保其他代码正常执行。
摘要由CSDN通过智能技术生成

实现方法是通过使用计时器,等待消息抵达,在等待过程中转让windows权限,可以达到延时目的(参考了其他例程),而且不影响窗口卡死。

这个引用需要手动导入,如果不需要考虑窗口卡死,可以去掉,不影响延时效果

System.Windows.Forms
using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace ConsoleApp2
{
    public class Timer
    {
        public delegate void TimerCompleteDelegate();

        [DllImport("kernel32.dll")]
        static extern IntPtr CreateWaitableTimer(IntPtr lpTimerAttributes, bool bManualReset, string lpTimerName);

        [DllImport("kernel32.dll")]
        static extern bool SetWaitableTimer(IntPtr hTimer, [In] ref long ft, int lPeriod, TimerCompleteDelegate pfnCompletionRoutine, IntPtr pArgToCompletionRoutine, bool fResume);

        [DllImport("kernel32.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi, CharSet = CharSe
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值