J'ai une boucle:Event Handlers synchronisation
List<FrameworkElement> list;
public void Foo(object sender, PrintPageEventArgs e)
{
foreach(FrameworkElement fe in list)
{
fe.LayoutUpdated += FeLayoutUpdated;
fe.UpdateLayout();
}
if(counter >= lista.Count)
e.PageVisual = objectFromClass. // was DoSth()
}
int counter = 0;
void FeLayoutUpdated(object sender, EventArgs e)
{
counter++
}
donc j'ai besoin DoSth() pour être tiré toujours quand Foo() est tiré et quand tous les objets de la liste FrameworkElement aura son mise à jour. J'essayais d'utiliser une classe Thread et aussi BackgroundWorker, mais je n'arrivais pas à atteindre le comportement désiré, c'est-à-dire que le thread principal attend que fe.UpdateLayout termine ses jobs. J'espère avoir clarifié l'idée principale. Merci pour les réponses.
Notez qu'il n'y a aucune garantie que 'LayoutUpdated' ne se déclenche qu'une seule fois par' FrameworkElement' – AnthonyWJones
My bad. Je viens de mettre à jour le code. Comme vous pouvez le voir, je ne peux pas déplacer DoSth() vers le gestionnaire d'événements. –
Je suppose qu'au lieu d'un simple compteur, vous devez suivre si chaque élément a été mis à jour ou non mais cela ne fonctionnera pas non plus car vous ne souhaitez capturer que le dernier événement LayoutUpdated. Quoi qu'il en soit, l'expéditeur sera également nul, donc le suivi des éléments mis à jour serait difficile. – VinayC