WPF DataGrid多執行緒更新資料顯示

2022-02-09 04:32:57 字數 1231 閱讀 9329

datagrid的資料來源的載入需要大量io操作,不可能等資料全部讀取之後才顯示到ui上。由於對wpf資料繫結不很熟悉,對observecollection等內容沒有太多時間去研究,只能用一些取巧的辦法了。

設定datagrid的資料來源,只要修改itemssource屬性就可以了,如下:

list datalist = new

list()

datagrid1.itemssource = datalist;

但是如果沒有進行資料繫結的話,對datalist進行add,是不會更新的ui上的,除非點選列標題,對列進行排序,ui執行緒對資料顯示的更新。主動的做法是使用refresh方法,如下:

datagrid1.items.refresh();

看到有的文章說用updatelayout,經過嘗試不怎麼管用。這樣就解決了ui更新的問題。

對資料來源的載入是需要另乙個執行緒的,wpf裡面是不允許非ui執行緒對ui執行緒中控制項進行直接的操作,這點好android是一樣的,應該都是從安全的角度考慮的。不過如果實在需要更新ui空間的話,也不是無解。android裡面可以用handler,wpf裡面用的是控制項的dispatcher,需要呼叫的是控制項dispatcher的begininvoke方法。在msdn上看到一篇文章(就講的是用begininvoke方法來多執行緒更新ui控制項的,不過這篇文章講的是windows form的,和wpf的乙個區別是,begininvoke直接就是控制項的方法。begininvoke實際上可以看作就是在呼叫乙個**方法,所以就用到委託了。

下面給出一段**示例(wpf的):

//

...

//new thread(threadmethod).start();

private

void

threadmethod()

;datagrid1.dispatcher.begininvoke(

newupdatedategriddelegate(updatedategrid), param);

}private

delegate

void updatedategriddelegate(int

time);

private

void updatedategrid(int

time)

當然,最好還是好好研究資料繫結,由於只是作業上的一小部分,時間也很有限,所以就用這種非主流的做法。

讓Duilib多執行緒程式設計更容易

一 duilib不能開發多執行緒程式?記得很久以前就聽有人說過duilib的多執行緒支援性不好,原因是duilib裡面的控制項是用陣列管理的全域性變數,不能進行多執行緒訪問,加鎖很麻煩。其實這個說法是非常不合理的,以至於在開發多執行緒程式時直接將duilib拒之門外。當然使用duilib裡面開發多執...

讓Duilib多執行緒程式設計更easy

一 duilib不能開發多執行緒程式?記得非常久曾經就聽有人說過duilib的多執行緒支援性不好,原因是duilib裡面的控制項是用陣列管理的全域性變數,不能進行多執行緒訪問,加鎖非常麻煩。事實上這個說法是非常不合理的,以至於在開發多執行緒程式時直接將duilib拒之門外。當然使用duilib裡面開...

多執行緒 多執行緒原理

我們首先要知道什麼是多執行緒,說白了就是多個執行緒,執行緒是什麼呢,其實就是程序執行的途徑,那麼說道這裡我們又引入了乙個新的名字,就是程序,那麼我們來看看什麼是程序,其實我們自己也能看到,啟動電腦的任務管理器,我們就可以看到程序選項,裡面是我們電腦所有的程序,我們會發現有很多的程序.簡單地說就是程序...