2010-04-12 4 views

Répondre

0

Vous pouvez mieux rechercher SO pour des questions connexes.

Quoi qu'il en soit, la réponse est ici.

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

ou vous pouvez y parvenir en utilisant répartiteur

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

et accéder à votre myScrollviewer en utilisant l'objet UIDispatcher créé

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

Résolu à l'aide de Dispatcher – user279244

0

Les interfaces utilisateur de WPF ont une "affinité de thread" - seul le thread qui crée l'interface utilisateur peut le mettre à jour.

Pour le scénario ci-dessus, vous devez mettre en cache l'objet Dispatcher (Dispatcher.CurrentDispatcher) lorsque l'interface utilisateur est créée. Les autres threads doivent déléguer leurs blocs de code à cet objet via un appel Invoke/BeginInvoke. Voir this link

0

Les contrôles ne peuvent être mis à jour qu'à partir du thread qui les a créés. Regardez dans la classe BackgroundWorker si vous devez exécuter une opération qui prend du temps dans un autre thread.

0

Une autre façon de côté d'utiliser le répartiteur est d'utiliser de liaison de données. Vous pouvez lier les propriétés de dépendance comme HorizontalOffset à une propriété d'un objet auquel vous pouvez accéder facilement dans un thread différent

Questions connexes