wp7 开发多线程更新ui,委托

在C#中,非主线程(即非UI线程,就是通过new Thread创建的线程)是不能直接操作UI元素的,Android中也一样,必须通过Handler与UI线程通讯,通知UI线程更新.而C#则采用委托的方式更新UI.下面用一个简单的实例来说明.这是一个WPF项目,只有一个名为textBlock1的TextBlock用于显示,一个名为button1的Button用于开启新线程来更新textBlock1.新线程执行的内容是0-100循环,而让textBlock1显示当前循环的进度.Windows Phone 7开发中,也通用,参考,,wp中有跨线程,有点的地方需要加上  Dispatcher.BeginInvoke(() =>

 

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秒
            }
 
        }
    }

转载于:https://www.cnblogs.com/shizhenglg/archive/2012/07/24/2605927.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值