c#跨线程操作界面


c#不允许对跨线程的控件的访问,如需操作跨线程的操作需要通过委托(delegate),即是函数指针来操作跨线

如果你直接执行,那么就是从子线程调用主线程的方法执行你的操作,这样是不允许的。 虽然没人告诉我这是为什么,但是我觉得(很多线程同时调用)那样可能会导致死锁的情况。举例说,我是主线程,电脑是子线程,我能够控制子线程怎么操作,可是你能让电脑控制我吗?显然不能,也不可能。那为什么引用就可以呢?引用是什么?引用就是方法的别名,如果你打过游戏,可以理解这是方法的一个副本。每个线程创建一个我的副本,那么就可以执行了,不会出现争抢,死锁的情况。)一楼线程安全代码的解释是这样的:定义一个委托创建一个方法{ 如果某一个操作需调用主线程的该方法 给他创建一个该方法的副本,调用该方法的副本执行操作 如果并没有调用主线程操作 直接执行【你需要的操作】}


例如siverlight中
需要用另外的线程操作界面


public void Init(Action<StackPanel> f) //把需要用单独线程操作界面的方法用委托的形式传进来
        {
            System.Threading.Thread oThread = new System.Threading.Thread(delegate()
            {
                Deployment.Current.Dispatcher.BeginInvoke(f, leftcompetitor);//执行方法,后边为参数
            });
            oThread.Start();


            ImageSource wimageSource = new BitmapImage(new Uri("Image/hong_4.png", UriKind.RelativeOrAbsolute));
            aa.Source = wimageSource;
        }


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值