国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

WPF多線程訪問控件

2019-11-17 03:10:22
字體:
供稿:網(wǎng)友

WPF多線程訪問控件

大家知道WPF中多線程訪問UI控件時會提示UI線程的數(shù)據(jù)不能直接被其他線程訪問或者修改,該怎樣來做呢?

分下面兩種情況

1.WinForm程序

 1   2 1)第一種方法,使用委托: 3 PRivate delegate void SetTextCallback(string text); 4         private void SetText(string text) 5         { 6             // InvokeRequired需要比較調(diào)用線程ID和創(chuàng)建線程ID 7             // 如果它們不相同則返回true 8             if (this.txt_Name.InvokeRequired) 9             {10                 SetTextCallback d = new SetTextCallback(SetText);11                 this.Invoke(d, new object[] { text });12             }13             else14             {15                 this.txt_Name.Text = text;16             }17         }18 2)第二種方法,使用匿名委托19         private void SetText(Object obj)20         {21             if (this.InvokeRequired)22             {23                 this.Invoke(new MethodInvoker(delegate24                 {25                     this.txt_Name.Text = obj;26                 }));27             }28             else29             {30                 this.txt_Name.Text = obj;31             }32         }33 這里說一下BeginInvoke和Invoke和區(qū)別:BeginInvoke會立即返回,Invoke會等執(zhí)行完后再返回。
View Code

2.WPF程序

1)可以使用Dispatcher線程模型來修改

如果是窗體本身可使用類似如下的代碼:

this.lblState.Dispatcher.Invoke(new Action(delegate{     this.lblState.Content = "狀態(tài):" + this._statusText;}));
View Code

那么假如是在一個公共類中彈出一個窗口、播放聲音等呢?這里我們可以使用:System.Windows.application.Current.Dispatcher,如下所示

 System.Windows.Application.Current.Dispatcher.Invoke(new Action(() => {     if (path.EndsWith(".mp3") || path.EndsWith(".wma") || path.EndsWith(".wav"))     {        _player.Open(new Uri(path));        _player.Play();    } }));
View Code


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 西昌市| 海淀区| 汾西县| 十堰市| 台东市| 永吉县| 彰武县| 陵川县| 永安市| 兴国县| 贡嘎县| 基隆市| 金乡县| 高邑县| 平度市| 灵川县| 禄丰县| 乐平市| 陆河县| 礼泉县| 三原县| 潍坊市| 桦川县| 海城市| 华池县| 阿合奇县| 浮梁县| 华容县| 简阳市| 九江市| 开化县| 黎川县| 灵台县| 手游| 广丰县| 右玉县| 宁安市| 阳春市| 南漳县| 易门县| 南投县|