我想从另一个线程访问一个scrollviewer。请告诉我如何从主线程中分离它,以便我可以更改滚动查看器的偏移量。 感谢
答案 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)
除了使用调度程序之外的另一种方法是使用数据绑定。您可以将依赖属性(如HorizontalOffset)绑定到可以在不同线程中轻松访问的对象的某些属性