[C#]Thread与委托实现定时刷新数据功能

Posted 厦门德仔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[C#]Thread与委托实现定时刷新数据功能相关的知识,希望对你有一定的参考价值。

用户需求:定时抓取ERP系统条码已扫描未审核单据

解决办法:
由于采用Timer控件会消耗系统资源,故采用线程处理。
由于线程调用方法不支持控件处理模式,故采用委托方法实现。

       bool bStop;
        public DataTable dt = new DataTable();
        public ScanedNotChecked_Frm()
        {
            InitializeComponent();
        }

        private void ScanedNotChecked_Frm_Load(object sender, EventArgs e)
        {
           //定义线程   
            Thread LogThread = new Thread(new ThreadStart(DoService));
            //设置线程为后台线程,那样进程里就不会有未关闭的程序了
            LogThread.IsBackground = true;
            bStop = true;
            if (bStop == true)
            {
                Control.PageControl.CheckForIllegalCrossThreadCalls = false;
                LogThread.Start();//起线程

            }                
        }
        private string  GetList() 
        {
            SqlParameter[] parms = new SqlParameter[0];
            DBCon db = new DBCon("ZM");
            gdScanedNotChecked.DataSource = SqlHelper.ExecuteDataset(db.StringConnection(), CommandType.StoredProcedure, "DZ_ScanedNotChecked", parms).Tables[0];

            return "重载";
        }
        int i = 0;
        private void DoService()
        {
            while (true)
            {
                bStop = false;
                //别的线程里的调用哇~
                i++;
                lblMessage.Text = "第" + i.ToString() + "次" + returnList(returnMylist) + "数据";
                System.Threading.Thread.Sleep(1000*60*5);
            }
        }
        private delegate string returnStrDelegate();
        //搞个最简单滴取值滴方法~
        private string returnMylist()
        {
            return GetList();
        }

        //判断一下是不是该用Invoke滴~,不是就直接返回~
        private string returnList(returnStrDelegate myDelegate)
        {
            if (this.InvokeRequired)
            {
                return (string)this.Invoke(myDelegate);
            }
            else
            {
                return myDelegate();
            }
        }

这里写图片描述

以上是关于[C#]Thread与委托实现定时刷新数据功能的主要内容,如果未能解决你的问题,请参考以下文章

c#如何使用委托 触发另一个窗体的按钮刷新另一窗体

c#中如何保证每隔一段时间执行一个动作。

C#里在子窗口与父窗口之间进行数据传送

C#里在子窗口与父窗口之间进行数据传送

C#委托(Delegate)简介

C#中关闭子窗口的同时刷新父窗口的办法?