1、就比如我在WPF 编程的时候,遇到这样的一个报错,The calling thread cannot access this object because a different thread owns it.原因是我使用了每隔几秒钟使用一次该程序,该程序不断的被使用,导致不同噢乖的线程在使用它。
2、我这咐搭趔涮边没有使用多线程,所以会报出这样的错误,最后我到网上去搜索了一下,针对这一的程序我该如何处理,果不其然,找到了处理的方法, Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Send,new Action(delegate() this.datagrid.ItemsSource = null; this.page.ShowPages(this.datagrid, table, MaxPageNum); }));
3、发现这样的话,还是会报错,这就说明这个异步调用还是没有实现我的这个程序的多次调用,原因还是因为非UI线程访问了UI控件,这个时候,又陷入迷糊了。
4、之后我又上网搜索关于WPF线程的问题,给出的解释是这样的:WPF应用程序都至少有两个线程,一个用于UI绘制,其隐藏于后台,另一个用于管理UI,包括用响应用户输入执行后台代码等
5、最后我通过不断的搜索了一个关于Application对象的使用,它也是用于多线程调用的,只是它的搜索范围更广。这个例子是这样的:S烤恤鹇灭ystem.Windows.Application.Current.Dispatcher.Invoke(newSystem.Action(()=>{IPrism.progressBar.Show();}));
6、然后我就用到我的程序中,这里更改很简单,把代码中的“Dispatcher.CurrentDispatcher”改成“Application.Current.Dispatcher”应该就可以了。然后通过运行,这个问题解决了,也可以不断的刷新了。