我有一个循环:事件处理程序的同步
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()总是被解雇时富()被触发,当从列表中的所有FrameworkElement的对象都将有它的布局更新。我试图使用一些Thread类和BackgroundWorker,但是我无法达到所需的行为,这是主线程正在等待fe.UpdateLayout完成他们的工作。我希望我明确了主要想法。感谢您的回复。
请注意,不能保证'LayoutUpdated'只会触发一次'FrameworkElement' – AnthonyWJones 2010-08-25 12:19:44
我的不好。我刚刚更新了代码。正如你所看到的,我不能将DoSth()移动到事件处理程序。 – 2010-08-25 12:34:39
我想那么而不是简单的计数器,你需要跟踪是否每个元素已被更新或不,但也不会工作,因为你只想捕获最后LayoutUpdated事件。无论如何,发件人也将为空,因此跟踪更新的元素将会非常棘手。 – VinayC 2010-08-25 13:12:59