WPF scrollviewer - доступ с использованием нескольких потоков - PullRequest
1 голос
/ 12 апреля 2010

Я хочу получить доступ к scrollviewer из другого потока. Подскажите, пожалуйста, как отсоединить его от основного потока, чтобы я мог изменить смещения прокрутки. Спасибо

Ответы [ 4 ]

0 голосов
/ 12 апреля 2010

Другим способом, кроме использования диспетчера, является использование привязки данных. Вы можете связать свойства зависимостей, такие как HorizontalOffset, с некоторым свойством объекта, к которому вы можете легко получить доступ в другом потоке

0 голосов
/ 12 апреля 2010

Элементы управления могут быть обновлены только из потока, который их создал. Посмотрите на класс BackgroundWorker, если вам нужно выполнить длительную операцию в другом потоке.

0 голосов
/ 12 апреля 2010

Вы можете лучше выполнить поиск SO для связанных вопросов.

В любом случае, ответ здесь.

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

или вы можете добиться этого с помощью диспетчера

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

и получите доступ к myScrollviewer с помощью созданного объекта UIDispatcher

UIDispatcher.Invoke(DispatcherPriority.Normal, new Action(() =>  
{  
    // access your myScrollviewer here 
}));  
0 голосов
/ 12 апреля 2010

Интерфейсы WPF имеют «сродство к потоку» - только поток, который создает интерфейс, может обновить его.

В приведенном выше сценарии вам придется кэшировать объект Dispatcher (Dispatcher.CurrentDispatcher) при создании пользовательского интерфейса. Другие потоки должны были бы делегировать свои блоки кода этому объекту через Invoke / BeginInvoke. Смотрите эту ссылку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...