2010-04-12 45 views

回答

0

您可以更好地搜索SO的相关问题。

无论如何,答案就在这里。

if (myScrollviewer.InvokeRequired) 
{ 
    myScrollviewer.BeginInvoke(new MethodInvoker(delegate { //access your myScrollviewer here })); 
} 

,或者您可以使用UIDispatcher对象实现这一点使用调度

Dispatcher UIDispatcher = Dispatcher.CurrentDispatcher; // Use this code in the UI thread 

,并访问您的myScrollviewer创建

UIDispatcher.Invoke(DispatcherPriority.Normal, new Action(() => 
{ 
    // access your myScrollviewer here 
})); 
+0

使用分派器解决方法感谢 – user279244 2010-04-13 13:47:48

0

WPF UI具有“线程关联” - 只有创建UI的线程才能更新它。

对于上述场景,您必须在创建UI时缓存Dispatcher对象(Dispatcher.CurrentDispatcher)。其他线程必须通过Invoke/BeginInvoke将其代码块委托给该对象。 请参阅this link

0

控件只能从创建它们的线程更新。如果需要在另一个线程中执行耗时的操作,请查看BackgroundWorker类。

0

另一边使用的调度方式是使用数据绑定。您可以将依赖项属性(如Horizo​​ntalOffset)绑定到可以在其他线程中轻松访问的对象的某个属性。