C# 隔一段时间自动刷新弹框(医院病人超时提醒)

做一个简单的弹框提醒,这里需要用到线程,那什么是线程,我百度了一下,大概是这个意思:

  通过System.Threading.Thread类可以开始新的线程,并在线程堆栈中运行静态或实例方法。可以通过Thread类的的构造方法传递一个无参数,并且不返回值(返回void)的委托(ThreadStart),这个委托的定义如下:

[ComVisibleAttribute(true)]

public delegate void ThreadStart()

我自己也不是特别懂,想了解的话建议直接百度。

今天做的这个实例是:在数据库中有一张表,这张表只有四个字段,分别是id,name,state,time。代表着id,姓名,状态和时间。我需要做的就是当我打开这个窗体的时候,这张表的信息会显示出来,在这里会用时间作对比,用系统的时间减去表中的时间,超过五分钟就弹框说“谁谁谁超时了”,每隔十秒弹一次。感觉很简单的样子。下面进入写代码的时间,首先需要连接数据库,这个应该就不用详细说了吧。

先定义一个全局变量,这个变量就是用来存储连接数据库语句的:

string str = @"server=localhost;database=数据库名称;user id=sa;pwd=密码";

在load里面就要写一个线程了,为什么需要写线程呢?我的原因是因为如果不写在线程里面,弹框就会在页面出现之前弹出来,显然是不符合道理的。并且我需要做自动刷新,在不关闭页面的情况下,在数据库中插入数据能够自动刷新上去。

   private void Form1_Load(object sender, EventArgs e)
        {        
            Control.CheckForIllegalCrossThreadCalls = false;//获取或设置一个值,该值指示是否捕获对错误线程的调用,这些调用在调试应用程序时访问控件的 Handle 属性
            Thread th = new Thread(new ThreadStart(() =>
            {
                while (true)
                {
                    try
                    {
                        SqlConnection con = new SqlConnection(str);
                        con.Open();//打开数据库连接
                        string sql = "SELECT * FROM T_USER";//查询语句
                        SqlDataAdapter data = new SqlDataAdapter(sql, con);
                        DataSet1 ds = new DataSet1();
                        data.Fill(ds);
                        con.Close();
                        DataTable dt = ds.Tables[0];//把查询出来的数据放在内存中的数据表中
                        dataGridView1.DataSource = dt;//绑定数据
                        string s = "";
                        string name = "";
                        DateTime dtime;
                        TimeSpan ts;
                        for (int i = 0; i < dt.Rows.Count; i++)
                        {
                            s = dt.Rows[i][3].ToString();//循环找出每一行的时间
                            name = dt.Rows[i][0].ToString();//循环找出每一行对应的名字
                            dtime = Convert.ToDateTime(s);//获取到查出来的时间
                            ts = System.DateTime.Now - dtime;//用系统的时间减去表中的时间
                            if (ts.Minutes >= 5)//如果大于五分钟
                            {
                                MessageBox.Show(name + "超时了");//弹框“谁谁谁超时了”
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.ToString());//异常
                    }
                    finally
                    {
                        Thread.Sleep(10000);//每隔十秒自动刷新重新弹框
                    }
                }
            }
                )
            ); //创建线程
            th.IsBackground = true;
            th.Start(); //启动线程
        }
    }
Control.CheckForIllegalCrossThreadCalls = false;//这句话很关键,如果没有这句话,绑定数据源的时候就会出现异常。

Thread th = new Thread(new ThreadStart(() =>{}));//创建线程 
好了,今天的内容就分享到这里了。

原文地址:https://www.cnblogs.com/madan01/p/10556698.html

时间: 2024-10-10 12:59:38

C# 隔一段时间自动刷新弹框(医院病人超时提醒)的相关文章

setTimeout() 实现程序每隔一段时间自动执行

定义和用法 setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式. 语法 setTimeout(code,millisec) 参数 描述 code 必需.要调用的函数后要执行的 JavaScript 代码串. millisec 必需.在执行代码前需等待的毫秒数. 提示和注释 提示:setTimeout() 只执行 code 一次.如果要多次调用,请使用 setInterval() 或者让 code 自身再次调用 setTimeout(). [示例] //每5秒使用Ajax取一次

可以每隔一段时间自动运行的一个批处理

可以每隔一段时间自动运行的一个批处理  zidong.bat代码 @echo off :Begin Start "d:\print.bat" rem 下面这行是延时代码,300是秒做单位的,300秒就是5分钟,需要多长时间自改一下 @Ping 127.0.0.1 -n 300 Goto Begin 执行后有个问题是每次关不掉print.bat print.bat代码 net session /delete /y 问题有待解决

模拟一个简单的相册查看器,每隔一段时间自动更换下一张照片。

1. int what = 0; Thread thread = new Thread(new Runnable() { public void run() { while (true) { handler.sendEmptyMessage((what++) % 4); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } } } }); 2. private Handler han

系统每隔一段时间自动pull代码

#!/bin/bash while true;do dd=$( date -u ) echo $dd,"start pull wmsinventoryapiwms6.2" cd /e/project/wmsinventoryapiwms6.2 git pull echo $dd,"start pull wmsadminwms6.2" cd /e/project/wmsadminwms6.2 git pull echo $dd,"start pull wms

c#实现每隔一段时间执行代码(多线程)

总结以下三种方法,实现c#每隔一段时间执行代码: 方法一:调用线程执行方法,在方法中实现死循环,每个循环Sleep设定时间: 方法二:使用System.Timers.Timer类: 方法三:使用System.Threading.Timer: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46

storm每隔一段时间发送tuple

TickTuple可以满足每隔一段时间发送tuple,"__system" component会定时往task发送 "__tick" stream的tuple, 发送频率由TOPOLOGY_TICK_TUPLE_FREQ_SECS来配置, 可以在default.ymal里面配置, 也可以在代码里面通过getComponentConfiguration()来进行配置. 代码里面配置如下 public Map<String, Object> getCompo

实现每次触发事件后隔一段时间后才能再次触发事件

比如: 每次点击“提交”按钮后隔3s后才能再次提交. 可以这样:点击后设置按钮不可用,并在3s后再设置按钮可用 $('#button1').click(function(){ //在这里提交或做别的事 $(this).attr("disabled",true); setTimeout("$('#button1').attr('disabled',false);", 3000); //此处setTimeout里面不能用$(this),this指的是window对象 }

隔一段时间应用就会挂掉(进程在,但停止响应,也无log输出),必须重启tomcat

此处是转载的  是给自己做的备注 问题:隔一段时间应用就会挂掉(进程在,但停止响应,也无log输出),必须重启tomcat 原因查找:由于tomcat自身log中并无错误产生,磁盘空间足够,读写也正常,排除其他原因后怀疑是jvm崩溃导致,于是查gc日志:从上图可以看出每次full GC是老年代内存占用量相当小,远没有达到它的最大值,持久代也一样,而且每次GC过后,占用量基本没有变化,也就是说,每一次full GC都是在做无用功,白白浪费掉了一大批性能.从内存占用率方面看不是内存分配不够,应该是程

setTimeout() 实现程序每隔一段时间自己主动运行

定义和使用方法 setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式. 语法 setTimeout(code,millisec) 參数 描写叙述 code 必需.要调用的函数后要运行的 JavaScript 代码串. millisec 必需.在运行代码前需等待的毫秒数. 提示和凝视 提示:setTimeout() 仅仅运行 code 一次.假设要多次调用,请使用 setInterval() 或者让 code 自身再次调用 setTimeout(). [演示样例] //每5秒使用