我有一段代碼在Silverlight代碼隱藏看起來是這樣的:Dispatcher.beginInvoke只通過循環執行最後一次?
foreach (MapLocation loc in e.Result)
{
testDict[loc.ElemId] = loc.ToString();
this.Dispatcher.BeginInvoke(delegate()
{
Image icon = new Image();
icon.SetValue(Image.SourceProperty, nurseIconSource);
Canvas.SetLeft(icon, (double)loc.X * MAP_SCALE);
Canvas.SetTop(icon, MAP_HEIGHT - (double)loc.Y * MAP_SCALE);
icons[loc.ElemId] = icon;
MainCanvas.Children.Add(icon);
});
}
}
這個環路上運行一個線程的25倍,從UI線程分開。 testDict對象在執行該方法後最終有25個條目,而圖標字典僅存儲第25個(最後一個)條目的條目。
這是我第一次使用Dispatcher。這是不是要被稱爲快速這樣的?我所能想到的是,第一次調用委託是在循環的最後一次之後,所以loc對象始終是同一個項目。這是否準確?
謝謝Jon。好文章也。 – Erix 2011-01-19 14:53:46