日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
WPF線程調(diào)用控件與發(fā)布事件

WPF開發(fā)工具是一款專門針對(duì)于圖形界面的工具。在這里我們將會(huì)針對(duì)WPF線程來幫助大家進(jìn)一步理解WPF中的具體含義,提高自己的開發(fā)速率。#t#

10年積累的成都網(wǎng)站制作、成都網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有新縣免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

跨線程調(diào)用控件

WPF應(yīng)用程序都至少有兩個(gè)WPF線程,一個(gè)用于UI繪制,其隱藏于后臺(tái),另一個(gè)用于管理UI。WPF中UI元素只能由創(chuàng)建該元素的線程來訪問。Dispatcher類來負(fù)責(zé)線程的組織和維護(hù)。通用的解決方法是使用提供的Dispatcher.Invoke方法來調(diào)用一個(gè)Delegate,從而安全地跨線程調(diào)用。(在winform中,是Control.Invoke)。

如下:

 
 
 
  1. public delegate void threadcall();  
  2. public void Thread()  
  3. {  
  4. if (Dispatcher.Thread != 
    Thread.CurrentThread)  
  5. {   
  6. Dispatcher.Invoke(System.
    Windows.Threading.Dispatcher
    Priority.Normal,new threadcall
    (CallMainThread)));  
  7. }  
  8. else  
  9. {  
  10. CallMainThread();  
  11. }  
  12. }  
  13. void CallMainThread()  
  14. {  
  15. textblock.text = "hello";  

但是這樣的缺點(diǎn)是要Code

 
 
 
  1. Application.Current.
    Dispatcher.BeginInvoke
    (DispatcherPriority.Normal, 
    (ThreadStart)delegate() 
    { DataDispatch(); });  
  2. private void DataDispatch()  
  3. {  
  4. FireEvent();  
  5. }  

不得不為每個(gè)調(diào)用編寫一個(gè)Invoke,還要額外聲明一個(gè)委托類型。為了減少代碼,可以采用匿名函數(shù)來寫。

 
 
 
  1. Invoke(new (MethodInvoker)
  2. delegate { Text = "Hello"; });  

或者

 
 
 
  1. Invoke(new (Threadstart)
  2. delegate { Text = "Hello"; }); 

跨線程發(fā)布事件

當(dāng)主線程調(diào)用了輔助WPF線程中類的事件時(shí),輔助線程可以將事件發(fā)布到主線程??梢圆捎肨hreadStart委托。ThreadStart委托表示在Thread上執(zhí)行的方法,語法如下:

 
 
 
  1. public delegate void 
    ThreadStart() 

我們可以采用默認(rèn)的Threadstart委托在其他線程(如主線程)上執(zhí)行事件觸發(fā)的操作。如:

 
 
 
  1. Application.Current.Dispatcher.
    BeginInvoke(DispatcherPriority.
    Normal, (ThreadStart)delegate() 
    { DataDispatch(); });  
  2. private void DataDispatch()  
  3. {  
  4. FireEvent();  

WPF線程說明:

對(duì)于Thread.ctor()來說,接受的是一個(gè)ThreadStart委托,編譯器便可以將匿名函數(shù)與ThreadStart委托類型匹配,最后能夠正確編譯。

對(duì)于Control.Invoke()來說,任何的代理類型都是可以接受,也就是說ThreadStart和MethodInvoker都是可以接受的類型。所以就需要顯示指定委托的類型,否則編譯器無法直到匹配的匿名函數(shù),導(dǎo)致了編譯錯(cuò)誤的發(fā)生。


分享題目:WPF線程調(diào)用控件與發(fā)布事件
網(wǎng)站路徑:http://m.5511xx.com/article/djjgjdc.html