廢話不多說.....我只會抱怨@@
最近在做datatable裡的資料binding到datagridview上,
由於資料會更新, 所以必須隨時Update到datagridview上,
但是又不想UI Thread卡死,
所以用新Thread去跑data,要更新時再去Invoke,讓主執行緒能更新畫面
//對控制項更新狀態 delegate void UpdateGridViewlHandle(); delegate void UpdateLabellHandle(int over,int count); private void UpdateGridView() { customDataGridView1.Refresh(); } private void UpdateLabel(int over,int count) { stateLabel.Text = "處理中…,失敗 "+getFailed+" 筆…"; }
DataRow dr = viewTable.NewRow(); for (int i = 0; i < tablelist.Count; i++) { dr[i] = tablelist[i]; } viewTable.Rows.Add(dr); //refresh datagridview this.Invoke(new UpdateGridViewlHandle(UpdateGridView)); //refresh label this.Invoke(new UpdateLabellHandle(UpdateLabel), counter++, ipArray.Count());
一開始並沒有將資料塞到Scrollbar會跑出來,以為這樣的程式碼是OK
結果資料量一大,Scrollbar要顯示出來的時候,有時候會整個卡死,有時候卻不會
一開始覺得可能是datagridview有問題,後來才發現可能Thread的關係,
當Thread invoke時,剛好Scrollbar也要顯示,結果就程式就當了
後來就開始找看能不能讓Scrollbar能一直顯示,而不是該顯示再顯示。
一開始以為datagridview會有Scrollbar直接顯示的屬性,但是卻用不出來
於是只好再網路上尋找解法
Always display Vertical ScrollBar in DataGridView
利用繼承的方法,將datagridview的 protected VerticalScrollBar設為True
再一開始就將ScrollBar設為可見,讓兩個thread不會卡死
VerticalScrollBar.Visible = true;
沒有留言:
張貼留言