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

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

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

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 的线程。

  代码如下:

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

   如此,则可以解决上述问题。

你可能感兴趣的:(thread,UI,object,Access,action,WPF)