C#多线程 使用委托更新UI实例(WP7开发 其他线程中更新UI)(转载)
2012-02-16 11:19
525 查看
在C#中,非主线程(即非UI线程,就是通过new Thread创建的线程)是不能直接操作UI元素的,Android中也一样,必须通过Handler与UI线程通讯,通知UI线程更新.而C#则采用委托的方式更新UI.下面用一个简单的实例来说明.这是一个WPF项目,只有一个名为textBlock1的TextBlock用于显示,一个名为button1的Button用于开启新线程来更新textBlock1.新线程执行的内容是0-100循环,而让textBlock1显示当前循环的进度.Windows Phone 7开发中,也通用,参考
上代码:
上代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.Threading; namespace WpfApplication2 { /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window { delegate void DelegateTest(int i); //使用delegate关键字,声明委托类型,参数和返回值都有要求,见下面说明 DelegateTest delegateTest; //声明委托类型所对应的委托 public MainWindow() { InitializeComponent(); } public void SetText(int i) { //更新UI的方法 textBlock1.Text = i.ToString(); } private void button1_Click(object sender, RoutedEventArgs e) { delegateTest = SetText; //实例化委托,就是添加委托要执行的方法, //可以用+=添加多个方法,如下面再增加 delegateTest +=方法名; //添加的方法,返回值和参数列表 必须与委托类型结构相同 //即这里DelegateTest与SetText参数都为int,返回值都为void Thread t = new Thread(new ThreadStart(ThreadProc)); //开线程方法与Java有些不同 t.Start(); //执行一个新线程 } public void ThreadProc() { for (int i = 0; i < 100; i++) { this.Dispatcher.BeginInvoke(delegateTest, i); //创建Dispatcher,使用BeginInvoke方法进行委托 Thread.Sleep(1000); //睡眠1秒 } } } } |
相关文章推荐
- Windows Phone开发之线程使用委托实现更新UI
- winfrom程序实时更新UI,程序长时间运行,不过我使用的线程和委托运行两天就自动退出了,不知道怎么回事??
- C# Winform使用线程,委托定时更新界面UI控件,解决界面卡顿问题
- 使用线程更新UI(转载)
- windows8开发-使用工作线程与更新UI
- C#利用委托跨线程更新UI数据
- 关于ndk开发使用jni回掉java方法更新UI的问题
- Android的线程使用来更新UI----Thread、Handler、Looper、TimerTask等【转】
- 在子线程中更新UI,只能使用Handler
- Android的线程使用来更新UI----Thread、Handler、Looper、TimerTask等
- Handler post()等在子线程中更新主线程的UI的方法使用小汇
- Android在其他线程中更新UI
- Android的线程使用来更新UI----Thread、Handler、Looper、TimerTask等
- 子线程中使用Toast或者更新UI
- Android的线程使用来更新UI----Thread、Handler、Looper、TimerTask等
- Android开发学习之路-使用Handler和Message更新UI
- Android的线程使用来更新UI----Thread、Handler、Looper、TimerTask等
- Android的线程使用来更新UI----Thread、Handler、Looper、TimerTask等
- Android Jni中使用线程及回调更新UI
- NetworkComms网络程序开发笔记(二): 跨线程更新UI