我有一個循環:事件處理程序的同步
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