में पृष्ठभूमि कार्यकर्ता के साथ एक पर्यवेक्षण चयन अद्यतन करें ठीक है, मैंने हाल ही में डेटा की बचत और लोड करने के लिए पृष्ठभूमि कार्यकर्ता को लागू किया है।एमवीवीएम
हालांकि, इसे सहेजने के आदेश पर काम करने के लिए यह मुश्किल साबित हुआ है।
मूल रूप से, मेरे आदेश को बचाने कि एक आइटम जोड़ दिया गया है एक घटना है कि एक संग्रह को देखने के मॉडल को सूचित करता है उत्पन्न करता है, और आइटम अपनी ही ObservableCollection में जोड़ा जाना चाहिए कि।
इस बिंदु पर, मैं कह रहा मैं एक अलग धागे पर एक ICollection अद्यतन नहीं कर सकते हमेशा की तरह अपवाद मिलता है। मैंने एक नया सूची प्रकार बनाने का प्रयास किया है जो Dispatcher.Invoke
पर कॉल करता है, हालांकि यह अभी भी एक ही अपवाद उत्पन्न करता है।
मैं सोच रहा था कि क्या किसी और को कैसे सबसे अच्छा यह से निपटने के लिए कोई सुझाव है?
public class ThreadSafeObservableCollection<T> : ObservableCollection<T>
{
public ThreadSafeObservableCollection(List<T> collection)
: base(collection)
{
dispatcher = Dispatcher.CurrentDispatcher;
rwLock = new ReaderWriterLock();
}
protected override void InsertItem(int index, T item)
{
if (dispatcher.CheckAccess())
{
if (index > this.Count)
return;
LockCookie c = rwLock.UpgradeToWriterLock(-1);
base.InsertItem(index, item);
rwLock.DowngradeFromWriterLock(ref c);
}
else
{
object[] obj = new object[] { index, item };
dispatcher.Invoke(
DispatcherPriority.Send,
(SendOrPostCallback)delegate { InsertItemImpl(obj); },
obj);
}
}
मैं तो एक दृश्य मॉडल वर्ग एक पृष्ठभूमि कार्यकर्ता किया जाता है जो बचाने है कि है:
तो वर्तमान में मैं एक वर्ग कि ObservableCollection से विरासत है।
एक बार बचाने पूरा हो गया है, एक घटना अपनी सूची को अद्यतन करने के एक और दृश्य मॉडल के लिए निकाल दिया गया है।
protected override void OnObjectAddedToRepository(object sender, ObjectEventArgs<cdAdministrators> e)
{
Dispatcher x = Dispatcher.CurrentDispatcher;
var viewModel = new AdministratorViewModel(e.EventObject, DataAccess);
viewModel.RecentlyAdded = true;
viewModel.ItemSelected += this.OnItemSelected;
this.AllViewModels.Add(viewModel);
RecentlyAddedViewModel = viewModel;
OnPropertyChanged(null);
}
दोनों सूचियों एक अलग पृष्ठभूमि कार्यकर्ता धागा द्वारा बनाई गई हैं।
हाय जॉन, धन्यवाद आपके उत्तर के लिए, मैं पहले से ही एक संग्रह वस्तु है, जो InsertItem पर ObserveableCollection से विरासत इस करता है, तो गलत तो है Dispather.BeginInvoke, हालांकि यह अभी भी काम नहीं कर रहा Dispatcher.CheckAccess करता है ?? – jpgooner
@jpgooner: क्या आप वाकई कोड का उपयोग कर रहे हैं? क्या आप एक संक्षिप्त लेकिन पूर्ण उदाहरण के साथ आ सकते हैं जो समस्या का प्रदर्शन करता है? –
मैंने ऊपर और अधिक विवरण जोड़ा है, अगर आपको अब और चाहिए तो मुझे बताएं, मैं अभी भी स्टैक ओवरफ्लो – jpgooner