WPF scrollviewer - 使用多个线程访问

时间:2010-04-12 10:43:28

标签: c# wpf multithreading

我想从另一个线程访问一个scrollviewer。请告诉我如何从主线程中分离它,以便我可以更改滚动查看器的偏移量。 感谢

4 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

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

或者您可以使用调度程序实现此目的

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

并使用创建的UIDispatcher对象访问myScrollviewer

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

答案 3 :(得分:0)

除了使用调度程序之外的另一种方法是使用数据绑定。您可以将依赖属性(如Horizo​​ntalOffset)绑定到可以在不同线程中轻松访问的对象的某些属性