Arka plan çalışmasında ağır iş yapıyorum, böylece Silverlight UI iş parçacığı etkilemiyor. Ancak, DoWork işlevinde bu özel durumu alıyorum:UI iş parçacığına erişmeden bir BackgroundWorker'da "UnauthorizedAccessException" alma
UnauthorizedAccessException
"Geçersiz çapraz iş parçacığı erişimi". Ben BackgroundWorker gelen UI iş parçacığı erişemez biliyorum
, Ancak bu istisna bu satırda oluşur:
ListBoxItem insert = new ListBoxItem();
Nasıl benim ui iş parçacığı erişiyor ??
Aşağıda daraltdığım gerçek kod parçası. o GUI parçası olarak kabul edilir, böylece
void FillSourceList()
{
busyIndicator.IsBusy = true;
BackgroundWorker bw = new BackgroundWorker();
bw.DoWork += (sender, args) =>
{
List<ListBoxItem> x = new List<ListBoxItem>();
for (int i = 0; i < 25; i++)
{
ListBoxItem insert = new ListBoxItem(); //<---Getting exception here
insert.Content = "whatever";
x.Add(insert);
}
args.Result = x;
};
bw.RunWorkerCompleted += (sender, args) =>
{
foreach (ListBoxItem insert in (List<ListBoxItem>)(args.Result))
sourceList.Items.Add(insert);
busyIndicator.IsBusy = false;
};
bw.RunWorkerAsync();
}
Teşekkür ederiz. Evet, bunun tamamıyla değil, yine de ilginç olması biraz gereksiz gibi görünüyor. Ancak .. Böyle renklendirme olarak içeriğine dayalı 'ListBoxItem's, bazı diğer işlem yapmak, bu yüzden sadece dizeleri oluşturamaz, ben kadar ben bir KeyValuePair içine gereken bilgileri ya da bir şey ambalaj yöneteceksiniz herhalde onların oluşturma. –
Öğeler için mini bir ViewModel düşünebilirsiniz. Sadece ItemsSource'a bir listeyi bağlayın ve ayarlanmışsınız, iplik güvenliği dahildir. –
İyi fikir! Muhtemelen, bunu yapacağım projenin geri kalanı için çok fazla değişiklik gerektirmemelidir (umarım). Ben uzun bir liste ItemsSource üzerinden bir denetime bağlı olarak, liste değiştirerek hala "Geçersiz çapraz iplik erişim" neden olacağını düşünürdüm –