我有一个循环:
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++
}
所以我需要在Foo()被触发时以及当列表中的所有FrameworkElement对象都更新它的布局时才触发DoSth()。我试图使用一些Thread类和BackgroundWorker,但我无法达到预期的行为,这就是主线程正在等待fe.UpdateLayout完成他们的工作。我希望我明确提出主要想法。谢谢你的回复。
答案 0 :(得分:1)
在事件处理程序(例如
)中的代码之后移动的快速解决方案void FeLayoutUpdated(object sender, EventArgs e)
{
counter++;
if(counter >= lista.Count)
DoSth();
}
答案 1 :(得分:1)
这有什么理由: -
public void Foo(List<FrameworkElement> list)
{
foreach(FrameworkElement fe in list)
{
fe.UpdateLayout();
}
DoSth();
}
不适合你吗? (注意Foo应该在主UI线程上调用)。