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

    xiaoxiao2021-12-02  46

    用户需求:定时抓取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(); } }

    厦门德仔 认证博客专家 项目实施 软件开发 数据分析 毕业于南昌大学,英语6级,拥有超过13年的工作经验,数据库工程师(中级),ERP认证工程师,FRCA报表工程师,美国PMP项目管理师,具有项目管理能力,拥有多年项目实施与运维,精通SQL数据库,Asp.net和数据分析管理和开发。曾在台企,港企,美企,民企实施过多个完整ERP,WMS,EHR,OA,BI等项目。
    转载请注明原文地址: https://ju.6miu.com/read-679632.html

    最新回复(0)