The Solution of "The calling thread cannot access this object beacuse a different thread owns it." .

 

原文:http://blog.csdn.net/suqingheangle/article/details/6900411

       最近在用WPF做一个关于UI表现的程序,其中需要通过监视一个指定的文件夹,然后将其中新增的图片进行显示的操作。

        最简单的一行代码如下,此代码是为界面上的TextBlock元素指定值,如下:

  1. this.lstText.Text = "Test";  
      因为UI层的控件和逻辑层不是同一线程进行控制,因此会导致加载时候出错,抛出如下的错误信息:The calling thread cannot access this object beacuse a different thread owns it.

      翻译成中文就是:[调用线程无法访问此对象,因为另一个线程拥有该对象。

  一种比较普遍的解决方法就是通过使用WPF的Dispatcher.Invoke 方法,只有在其上创建 Dispatcher 的线程才可以直接访问 DispatcherObject。若要从不同于在其上创建 DispatcherObject 的线程的某个线程访问 DispatcherObject,请对与 DispatcherObject 关联的 Dispatcher 调用 Invoke 或 BeginInvoke。需要强制线程安全的 DispatcherObject 的子类可以通过对所有公共方法调用 VerifyAccess 来强制线程安全。这样可以保证调用线程是在其上创建 DispatcherObject 的线程。

  代码如下:

  1. lstText[i].Dispatcher.Invoke(new Action(() =>  
  2.                            {   
  3.                                this.lstText.Text = "Test";  
  4.                            }));  

   如此,则可以解决上述问题。
其他资料 http://www.silverlightchina.net/html/study/WPF/2011/0224/5611_2.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值