אני משתמש הרבה פעמים ב ObservableDictionary של DR WPF
היתה לי בעיה שחוזרת על עצמה כאשר מוסיפים או מורידים איברים מה dictionary ב thread אחר , הוא זורק את ה CollectionChanged / PropertyChanged על אותו thread שבוא נעשה השינוי וזה מה שגורם ל exception:
"InvalidOperationException: The calling thread cannot access this object because a different thread owns it."
כדי לתת תמיכה מתוך ה ObservableDictionary עשיתי לו שינוי קטן שתומך בזריקת ה events על ה dispatcher הנכון:
1. הוספת dispatcher ו DispatcherPriority ל ctor's – כפרמטרים אופציונאליים
public ObservableDictionary(Dispatcher dispatcher = null,DispatcherPriority dispatcherPriority = DispatcherPriority.DataBind)
{
_dispatcher = dispatcher;
_dispatcherPriority = dispatcherPriority;
_keyedEntryCollection = new KeyedDictionaryEntryCollection<TKey>();
}
2. במתודות OnCollectionChanged ו OnPropertyChanged אם יש dispatcher משתמשים בו כדי להעלות את ה event על הUI thread הנכון.
ניתן להוריד את הקוד מכאן
אין תגובות:
הוסף רשומת תגובה