首页 > 编程语言 >c# winform定时刷新

c# winform定时刷新

时间:2023-05-23 11:23:22浏览次数:35  
标签:c# void System private DateTime new 定时 true winform

 

Thread多线程

   public partial class Form2 : Form
    {
        //横向滚动条记录的是像素位数
        //竖向滚动条记录的行的索引值
        int VerticalScrollIndex = 0;
        int HorizontalOffset = 0;
        public Form2()
        {
            InitializeComponent();
            searchData();
        }
        /// <summary>
        /// 查找数据(查询调用函数)
        /// </summary>
        private void searchData()
        {
            //开始查询数据
            Thread th = new Thread(new ThreadStart(StartSearchData))
            {  
//设置为后台线程,否则即使主程序界面关闭了,程序也不会真正关闭,子线程会继续执行下去 th.IsBackground = true;
} th.Start(); } //控制下面while 循环,实现定时刷新的效果,如果在查询开始的时候需要设置为true, //如果不需要定时查询了设置为false就好 bool IsReflash = true; private delegate void InvokeHandler();//使用代理让主线程去处理控件数据 /// <summary> ///开始查询数据库的数据 /// </summary> private void StartSearchData() { try { while (IsReflash) { string sql = string.Format("select * from Student "); SqlCommand cmd = new SqlCommand(sql, DBhelper.conn()); DBhelper.conn().Open(); DataTable dt = new DataTable(); SqlDataAdapter da = new SqlDataAdapter(sql, DBhelper.conn()); da.Fill(dt); //判断句柄是否被创建,创建之后才能使用 Invoke及BeginInvoke if (this.IsHandleCreated) { this.Invoke(new InvokeHandler(delegate () { dataGridView1.DataSource = dt; dataGridView1.FirstDisplayedScrollingRowIndex = VerticalScrollIndex; })); } Thread.Sleep(2000);//设置刷新时长 } } catch (Exception ex) { MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private void dataGridView1_Scroll(object sender, ScrollEventArgs e) { if (e.ScrollOrientation == ScrollOrientation.VerticalScroll) { VerticalScrollIndex = e.NewValue; } else if (e.ScrollOrientation == ScrollOrientation.HorizontalScroll) { HorizontalOffset = e.NewValue; } } }

 

System.Timers.Timer

private static System.Timers.Timer timer = new System.Timers.Timer();
private static int inTimer = 0;

 private void Form1_Load(object sender, EventArgs e)//初始化
        {
            timer.Interval = 1 * 60 * 1000;//默认每1小时执行一次
                    timer.Enabled = true;
                    timer.Elapsed += new System.Timers.ElapsedEventHandler(TimedEvent);
                    timer.AutoReset = true;//设置是执行一次(false)还是一直执行(true);
       
        }

  //定时执行事件
        private void TimedEvent(object sender, System.Timers.ElapsedEventArgs e)
        {
            XmlModel.Config _model = DataOperation.Instance.GetConfig();
            if (_model != null)
            {
                DateTime currentDt = DateTime.Now;
                DateTime time1begin = DateTime.Parse(_model.StartTime);
                DateTime time1end = DateTime.Parse(_model.EndTime);
                //在特定时间内
                if (currentDt > time1begin && currentDt < time1end)
                {
                    //业务逻辑代码
                    if (Interlocked.Exchange(ref inTimer, 1) == 0)
                    {
                        //业务逻辑代码
                        StringBuilder slog = new StringBuilder();
                        slog.AppendFormat("Total memory: {0:###,###,###,##0} bytes", GC.GetTotalMemory(true));
                        WriteLog(slog.ToString());
                        slog.Clear();
                        Interlocked.Exchange(ref inTimer, 0);

                    }
                }
            }



        }
  #region 内存回收
        [DllImport("kernel32.dll", EntryPoint = "SetProcessWorkingSetSize")]
        public static extern int SetProcessWorkingSetSize(IntPtr process, int minSize, int maxSize);
        /// <summary> 
        /// 释放内存
        /// </summary> 
        public static void ClearMemory()
        {
            GC.Collect();
            GC.WaitForPendingFinalizers();
            if (Environment.OSVersion.Platform == PlatformID.Win32NT)
            {
                SetProcessWorkingSetSize(System.Diagnostics.Process.GetCurrentProcess().Handle, -1, -1);
            }
        }
        #endregion

 

标签:c#,void,System,private,DateTime,new,定时,true,winform
From: https://www.cnblogs.com/qingjiawen/p/17422778.html

相关文章

  • 图解LeetCode——793. 阶乘函数后 K 个零(难度:困难)
    一、题目 f(x) 是 x! 末尾是0的数量。回想一下 x!=1*2*3*...*x,且0!=1 。例如, f(3)=0 ,因为3!=6的末尾没有0;而f(11)=2 ,因为11!=39916800末端有2个0。给定 k,找出返回能满足f(x)=k 的非负整数x 的数量。二、示例2.1>示例1:【输入......
  • 图解LeetCode——剑指 Offer 34. 二叉树中和为某一值的路径
    一、题目给你二叉树的根节点root和一个整数目标和targetSum,找出所有从根节点到叶子节点路径总和等于给定目标和的路径。叶子节点是指没有子节点的节点。二、示例2.1>示例1:【输入】root=[5,4,8,11,null,13,4,7,2,null,null,5,1],targetSum=22【输出】[[5,4,11,2],[5,......
  • 图解LeetCode——662. 二叉树最大宽度(难度:中等)
    一、题目给你一棵二叉树的根节点root,返回树的最大宽度。树的最大宽度是所有层中最大的宽度。每一层的宽度被定义为该层最左和最右的非空节点(即,两个端点)之间的长度。将这个二叉树视作与满二叉树结构相同,两端点间会出现一些延伸到这一层的null节点,这些null节点也计入长......
  • 图解LeetCode——658. 找到 K 个最接近的元素(难度:中等)
    一、题目给定一个排序好的数组 arr,两个整数k和x,从数组中找到最靠近x(两数之差最小)的k个数。返回的结果必须要是按升序排好的。整数a比整数b更接近x需要满足:|a-x|<|b-x|或者|a-x|==|b-x|且a<b二、示例2.1>示例1:【输入】arr=[1,2,3,4,5],k=......
  • 图解LeetCode——剑指 Offer 36. 二叉搜索树与双向链表
    一、题目输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。二、示例为了让您更好地理解问题,以下面的二叉搜索树为例:我们希望将这个二叉搜索树转化为双向循环链表。链表中的每个节点都有一个前驱和后继指针。对......
  • 图解LeetCode——782. 变为棋盘(难度:困难)
    一、题目一个 n*n 的二维网络 board 仅由 0 和 1 组成 。每次移动,你能任意交换两列或是两行的位置。返回将这个矩阵变为 “棋盘”  所需的最小移动次数 。如果不存在可行的变换,输出-1。“棋盘”是指任意一格的上下左右四个方向的值均与本身不同的矩阵。二、示例......
  • 图解LeetCode——1460. 通过翻转子数组使两个数组相等(难度:简单)
    一、题目给你两个长度相同的整数数组 target 和 arr 。每一步中,你可以选择 arr 的任意非空子数组 并将它翻转。你可以执行此过程任意次。如果你能让arr 变得与target 相同,返回True;否则,返回False。二、示例2.1>示例1:【输入】target=[1,2,3,4],arr=[2,4,1,3]......
  • 图解LeetCode——剑指 Offer 07. 重建二叉树
    一、题目输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。二、示例2.1>示例1:【输入】preorder=[3,9,20,15,7],inorder=[9,3,15,20,7]【输出】[3,9,20,null,null,15,7]2.2>示例2:【输入】pr......
  • 图解LeetCode——剑指 Offer 29. 顺时针打印矩阵
    一、题目输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。二、示例2.1>示例1:【输入】matrix=[[1,2,3],[4,5,6],[7,8,9]]【输出】[1,2,3,6,9,8,7,4,5]2.2>示例2:【输入】matrix= [[1,2,3,4],[5,6,7,8],[9,10,11,12]]【输出】[1,2,3,4,8,12,11,10,9,5,6,7]限......
  • 图解LeetCode——剑指 Offer 15. 二进制中1的个数
    一、题目编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为'1'的个数(也被称为 汉明重量)。二、示例2.1>示例1:【输入】n=11(控制台输入00000000000000000000000000001011)【输出】3【解释】输入的二进制串000000000000000000000000000010......