我在使用後臺工作人員創建我的對象模型時遇到了麻煩。如何從backgroundWorker線程創建通用控件?
據我瞭解爲什麼,我無法找到解決方法。
這裏是僞邏輯:
呼叫web服務異步
接收。當,在Load方法背景
打開背景工人,和數據裝載到控制,搜索現有對象,如果找不到,則創建一個新對象。
所有創建的對象都從Control繼承(具有透明抽象層)。
雖然我在主線程創建控件,功能,做工精細:
public static T Find<T>(ObservableCollection<T> collection, int objectId)
where T : FormaliteBaseControl, new()
{
foreach (T item in collection)
{
if (item.ObjectId == objectId)
return item;
}
return new T();
}
當然,從後臺線程調用時,一個跨線程異常的「新T()」 發生在Silverlight ,無法同步調用Dispatcher.Invoke。
雖然我以這種方式創建了大約450個對象,但我希望將對象模型創建保留在後臺而不會降低Thread.Sleep或其他「好」方法的性能。
感謝您的回答。
將450個UI控件放入什麼類型的容器?一個ItemsControl或列表框?什麼是虛擬化? – WiredPrairie 2010-08-17 12:22:16
由於您使用的是線程,因此您可能會遇到與您正在使用的集合有關的問題 - 如果您是從另一個線程修改集合(而另一個線程正在使用枚舉器,則通過foreach)。 – WiredPrairie 2010-08-17 12:23:39