免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
WPF DataGrid多線程更新數(shù)據(jù)顯示

WPF DataGrid多線程更新數(shù)據(jù)顯示

DataGrid的數(shù)據(jù)源的加載需要大量IO操作,不可能等數(shù)據(jù)全部讀取之后才顯示到UI上。由于對WPF數(shù)據(jù)綁定不很熟悉,對ObserveCollection等內(nèi)容沒有太多時間去研究,只能用一些取巧的辦法了。

設(shè)置DataGrid的數(shù)據(jù)源,只要修改ItemsSource屬性就可以了,如下:

List dataList = new List()datagrid1.ItemsSource = dataList;

但是如果沒有進(jìn)行數(shù)據(jù)綁定的話,對dataList進(jìn)行Add,是不會更新的UI上的,除非點擊列標(biāo)題,對列進(jìn)行排序,UI線程對數(shù)據(jù)顯示的更新。主動的做法是使用Refresh方法,如下:

dataGrid1.Items.Refresh();

看到有的文章說用UpdateLayout,經(jīng)過嘗試不怎么管用。這樣就解決了UI更新的問題。

對數(shù)據(jù)源的加載是需要另一個線程的,WPF里面是不允許非UI線程對UI線程中控件進(jìn)行直接的操作,這點好Android是一樣的,應(yīng)該都是從安全的角度考慮的。不過如果實在需要更新UI空間的話,也不是無解。Android里面可以用Handler,WPF里面用的是控件的Dispatcher,需要調(diào)用的是控件Dispatcher的BeginInvoke方法。在MSDN上看到一篇文章(http://msdn.microsoft.com/en-us/library/757y83z4(v=VS.100).aspx),就講的是用BeginInvoke方法來多線程更新UI控件的,不過這篇文章講的是Windows Form的,和WPF的一個區(qū)別是,BeginInvoke直接就是控件的方法。BeginInvoke實際上可以看作就是在調(diào)用一個回調(diào)方法,所以就用到委托了。

下面給出一段代碼示例(WPF的):

        //...        //new Thread(ThreadMethod).Start();        private void ThreadMethod()        {            object[] param = { 1000 };            dataGrid1.Dispatcher.BeginInvoke(new updateDateGridDelegate(UpdateDateGrid), param);        }        private delegate void updateDateGridDelegate(int time);        private void UpdateDateGrid(int time)        {            Thread.Sleep(time);            dataGrid1.Items.Refresh();            return;        }

當(dāng)然,最好還是好好研究數(shù)據(jù)綁定,由于只是作業(yè)上的一小部分,時間也很有限,所以就用這種非主流的做法。

歡迎轉(zhuǎn)載,同時請注明出處
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
.Net5 WPF快速入門系列教程
C# WinForm 跨線程訪問控件
詳解WPF線程模型和Dispatcher
WPF 基礎(chǔ)到企業(yè)應(yīng)用系列3——Dispatcher及多線程
WPF的線程模型
WPF線程模型及委托事件應(yīng)用
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服