Синхронизация обработчиков событий - PullRequest
2 голосов
/ 25 августа 2010

У меня есть цикл:

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++
}

Так что мне нужно, чтобы DoSth () запускался всегда, когда запускается Foo () и когда все объекты FrameworkElement из списка будут обновлять свой Layout.Я пытался использовать некоторый класс Thread, а также BackgroundWorker, но я не смог достичь желаемого поведения, которое заключается в том, что основной поток ожидает, пока fe.UpdateLayout завершит свою работу.Надеюсь, я прояснил основную идею.Спасибо за ответы.

Ответы [ 2 ]

1 голос
/ 25 августа 2010

Есть ли причина, по которой это: -

public void Foo(List<FrameworkElement> list) 
{ 
  foreach(FrameworkElement fe in list) 
  { 
    fe.UpdateLayout(); 
  } 
  DoSth(); 
}

У вас не работает?(Примечание Foo должен вызываться в основном потоке пользовательского интерфейса).

1 голос
/ 25 августа 2010

Быстрое решение для перемещения после кода в обработчике событий, например

void FeLayoutUpdated(object sender, EventArgs e)
{
  counter++;
  if(counter >= lista.Count)
    DoSth();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...