C#实现的Win32控制台线程计时器功能示例_C#教程

本文实例讲述了C#实现的Win32控制台线程计时器功能。分享给大家供大家参考,具体如下:

在C#中提供了三种类型的计时器:

1、基于 Windows 的标准计时器(System.Windows.Forms.Timer)
2、基于服务器的计时器(System.Timers.Timer)
3、线程计时器(System.Threading.Timer)

一、基于 Windows 的标准计时器(System.Windows.Forms.Timer)

首先注意一点就是:Windows 计时器是为单线程环境设计的
此计时器从Visual Basic 1.0 版起就存在于该产品中,并且基本上未做改动

这个计时器是使用最简单的一种,只要把工具箱中的Timer控件拖到窗体上,然后设置一下事件和间隔时间等属性就可以了

二、基于服务器的计时器(System.Timers.Timer)

System.Timers.Timer不依赖窗体,是从线程池唤醒线程,是传统的计时器为了在服务器环境上运行而优化后的更新版本,在VS2008的工具箱中没有提供现成的控件,需要手工编码使用此计时器

三、线程计时器(System.Threading.Timer)

线程计时器也不依赖窗体,是一种简单的、轻量级计时器,它使用回调方法而不是使用事件,并由线程池线程提供支持。对消息不在线程上发送的方案中,线程计时器是非常有用的。

这里只针对控制台线程计时器的使用给出代码示例,后续会给出其它几种的代码示例:

using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
/************************************************************************/
/* CSharp控制台线程计时器代码示例
 * Powered by:testcs_dn
 * Blog:http://blog.csdn.net/testcs_dn
 */
/************************************************************************/
namespace CSharp控制台线程计时器代码示例
{
  /// <summary>
  /// 控制台线程计时器代码示例
  /// 这里展示了Windows API SetConsoleCtrlHandler函数的应用,同时展示了线程计时器的使用;
  /// Author:testcs_dn
  /// Date:2015-01-03
  /// </summary>
  class Program
  {
    /// <summary>
    /// 计时器回调函数,在这里处理计时时间是否到达的判断以及要做的事情;
    /// </summary>
    /// <param name="obj"></param>
    public static void workOvertimeTimerCallback(object obj)
    {
      DateTime dt = DateTime.Now;
      if (dt.Hour == 16 && dt.Minute > 0)
      {
        Console.WriteLine("ok");
      }
    }
    //计时器变量
    public static System.Threading.Timer workOvertimeTimer = null;
    //定义处理程序委托
    delegate bool ConsoleCtrlDelegate(int dwCtrlType);
    const int CTRL_CLOSE_EVENT = 2;
    //导入SetCtrlHandlerHandler API
    [DllImport("kernel32.dll")]
    private static extern bool SetConsoleCtrlHandler(ConsoleCtrlDelegate HandlerRoutine, bool Add);
    static void Main(string[] args)
    {
      ConsoleCtrlDelegate newDelegate = new ConsoleCtrlDelegate(HandlerRoutine);
      if (SetConsoleCtrlHandler(newDelegate, true))
      {
        //初始化计时器
        workOvertimeTimer = new System.Threading.Timer(new TimerCallback(workOvertimeTimerCallback), null, 1000, 10000);
        //这里执行你自己的任务,我举例输出“...”,为了展示长时间的任务,我用了一个死循环;
        //避免输出太多,使用了Sleep;
        //注意:Sleep的时间不可太长,否则可能影响Console.ReadKey(),导致不能接收用户输入;
        while (true)
        {
          Console.WriteLine("...");
          Thread.Sleep(100);
        }
      }
      else
      {
        Console.WriteLine("抱歉,API注入失败,按任意键退出!");
        Console.ReadKey();
      }
    }
    /// <summary>
    /// 处理程序例程,在这里编写对指定事件的处理程序代码
    /// </summary>
    /// <param name="CtrlType"></param>
    /// <returns></returns>
    static bool HandlerRoutine(int CtrlType)
    {
      switch (CtrlType)
      {
        case CTRL_CLOSE_EVENT:    //用户要关闭Console了
          Console.WriteLine();
          Console.WriteLine("任务还没有完成,确认要退出吗?(Y/N)");
          ConsoleKeyInfo ki = Console.ReadKey();
          return ki.Key == ConsoleKey.Y;
        default:
          return true;
      }
    }
  }
}

更多关于C#相关内容感兴趣的读者可查看本站专题:《C#字符串操作技巧总结》、《C#数组操作技巧总结》、《C#中XML文件操作技巧汇总》、《C#常见控件用法教程》、《C#程序设计之线程使用技巧总结》、《C#操作Excel技巧总结》、《WinForm控件用法总结》、《C#数据结构与算法教程》及《C#面向对象程序设计入门教程》

希望本文所述对大家C#程序设计有所帮助。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索c#
, 线程
, 控制台
, win32
计时器
c站、c语言、cf、ch、c罗,以便于您获取更多的相关知识。

时间: 2024-07-28 16:28:45

C#实现的Win32控制台线程计时器功能示例_C#教程的相关文章

在Winform动态启动、控制台命令行的方法_C#教程

需求winForm 程序输出类型为 windows 程序(不是命令行程序)在运行时想输入一些信息编译开发调试,如何实现这一功能 解答: AllocConsole.FreeConsole 这两个 API 可以在任何时候调用和关闭 命令行. 代码演示:API 部分 复制代码 代码如下: using System.Runtime.InteropServices; namespace WindowsFormsApplication1{    public partial class NativeMeth

C# MVC模式下商品抽奖功能实现_C#教程

最近项目需求的一个抽奖功能给整理了下,语言表达能力不好,写的不好请勿吐槽,一笑而过就好.好了下面开始说说这个抽奖功能.因为涉及到公司的项目所以一些敏感的地方均已中文代替. 首先在后台添加奖品的名称以及概率如图: 后台代码没什么好说的,我们来看看前端代码. 通过html做出如下样式: <div class="turntable-bg"> <div class="pointer"> <img id="pointer" s

win32 api实现2048游戏示例_C 语言

自学的win32编程,写了一个win32 API版2048,自己摸索着写的,按上下左右箭头开始游戏 复制代码 代码如下: #include <windows.h>#include <stdlib.h>#include <stdio.h>#include <ctime>LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);//全局操作数组int arr[4][4] = { { 0, 0, 0, 0 }, {

C++卸载程序功能示例_C 语言

注:在程序退出的时候写上 自己的卸载代码. 复制代码 代码如下: // FileName: Uninstall.h#pragma once class CUninstall{private:     // Exe文件名    CString m_strExeName;     // Bat文件名    CString m_strBatName; public:     // exe的路径    CString m_strExePath;     // bat的路径    CString m_st

c语言线程终止练习示例_C 语言

复制代码 代码如下: #include <stdio.h>#include <stdlib.h>#include <pthread.h> void *t1(void *args) { return (void *) 0;} void *t2(void *args) { printf("thread 2 param[args] = %d\n", args); pthread_exit((void *) 3);} void *t3(void *args)

C#实现文件上传与下载功能实例_C#教程

最近学习了 C#实现文件上传与下载,现在分享给大家. 1.C#文件上传 创建MyUpload.htm页面,用于测试 <form name="form1" method="post" action="UploadFile.aspx" id="form1" enctype="multipart/form-data"> <input type="file" id="

模拟简单猜扑克牌大小的Win32控制台游戏

本文配套源码 在坛子里经常能看到MFC编制的GUI游戏,功能强大,界面美观,人机交互便利等优点是控制台程序是无可比拟的.但对于刚初步了解 C/C++的朋友们是无法短期内能学会编写MFC游戏的.于是小弟采用 Win32 控制台 项目做了一个C++的小游戏,希望对于那些朋友,对大一, 大二的学生编写字符界面的小程序有所帮助. 该游戏的名称不妨命名为Hi(gh)-Low,其玩法和规则如下: 1.玩法 ①洗牌:每盘游戏开始之前,使扑克牌的排列顺序充分随机: ②发牌:每局开始时,从未使用的扑克牌集合中顺序

python实现简单的计时器功能函数_python

本文实例讲述了python实现简单的计时器功能函数.分享给大家供大家参考.具体如下: 此函数通过python实现了一个简单的计时器动能: ''' Simple Timing Function. This function prints out a message with the elapsed time from the previous call. It works with most Python 2.x platforms. The function uses a simple tric

Visual studio 中win32控制台应用程序和空项目有什么却别?

问题描述 Visual studio 中win32控制台应用程序和空项目有什么却别? 如果你不知道有什么区别,可以先运行一下,这些代码. http://ask.csdn.net/questions/187617 可以正常的在win32控制台应用程序建的工程上运行. 在空项目,就会有帖子上的错误. 下边回答的空项目的图片传错了,应该是: 解决方案 空项目没有默认包含和使用的库,链接器也没有配置为控制台,这些都需要手工设置. 但是,你完全可以通过创建空项目,并且手工设置,达到和创建任何一种项目,包括