public RefreshXtraGrid(GridControl grid, int refreshTime, delegateGetDataset dlgDataset, delegateRefreshDisplayDataset dlgRefreshData) { this.thread = new Thread(delegate() { try { while (true) { Thread.Sleep(refreshTime); DataSet ds=dlgDataset();//lấy dữ liệu trong mạc trình refresh thread setDisplayData(grid, ds, dlgRefreshData);//thiết đặt gọi an toàn } } catch (ThreadAbortException ex) { PLException.AddException(ex); } }); this.thread.Name = "refreshThread"; this.thread.Start(); }
private void setDisplayData(GridControl grid, DataSet ds, delegateRefreshDisplayDataset dlgRefreshData) { try { if (grid.InvokeRequired) { //1-đang là refresh Thread grid.Invoke(new delegateSetDisplayData(setDisplayData), grid, ds, dlgRefreshData); //2-chuyển qua main Thread } else { //3-đang là main Thread, lúc này là an toàn, muốn gọi gì cũng được if (grid.IsDisposed == true)//kiểm tra hủy rferesh thread khi đóng form, nếu như reresh thread vẫn running background thread.Abort();//tung biệt lệ và kết thúc dlgRefreshData(grid, ds); } } catch (Exception ex) { PLException.AddException(ex); } }