標籤:illegal type ddc 資料 tty back ade parameter control
使用者需求:定時抓取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與委託實現定時重新整理資料功能