Dans une application WPF, un thread BackgroundWorker créait un objet. Appelons l'objet foo.InvalidOperationException sur un objet à partir d'un thread exécuté
Code de travail de fond:
SomeClass foo = new SomeClass();
// Do some operation on foo
// Set some dependency property on the main class to foo
this.Dispatcher.BeginInvoke(DispatcherPriority.Normal,
(SendOrPostCallback)delegate { SetValue(FooProperty, foo); },
foo);
Maintenant, quand la classe principale tente d'accéder FooProperty à l'aide d'un getter, je reçois un InvalidOperationException: Le thread appelant ne peut pas accéder à cet objet parce qu'un autre thread est propriétaire.
Si le thread créer l'objet est terminé, pourquoi possède-t-il toujours l'objet? Y-a-t-il moyen de faire autrement.?
J'ai essayé d'effectuer le paramètre dans le rappel RunWorkerCompleted, mais j'ai besoin que le thread principal attende à un certain endroit dans un constructeur jusqu'à ce que le paramètre ait été fait. Bien sûr, cela bloque l'exécution entière et le rappel RunWorkerCompleted n'est jamais exécuté.Existez-vous une meilleure pratique pour faire de l'exécution "attendre"? –
Votre droit.Tout les attentes doivent être faites dans le thread d'arrière-plan.Si le constructeur doit w Pour un certain réglage à faire, je suggère de prendre cette attente sur le constructeur (si possible) et de l'appeler dans votre fil de fond. – helios456