Ето моя проблем.
Зареждам няколко BitmapImages в BlockingCollection
public void blockingProducer(BitmapImage imgBSource)
{
if (!collection.IsAddingCompleted)
collection.Add(imgBSource);
}
зареждането се случва във фонова нишка.
private void worker_DoWork(object sender, DoWorkEventArgs e)
{
String filepath; int imgCount = 0;
for (int i = 1; i < 10; i++)
{
imgCount++;
filepath = "Snap";
filepath += imgCount;
filepath += ".bmp";
this.Dispatcher.BeginInvoke(new Action(() =>
{
label1.Content = "Snap" + imgCount + " loaded.";
}), DispatcherPriority.Normal);
BitmapImage imgSource = new BitmapImage();
imgSource.BeginInit();
imgSource.UriSource = new Uri(filepath, UriKind.Relative);
imgSource.CacheOption = BitmapCacheOption.OnLoad;
imgSource.EndInit();
blockingProducer(imgSource);
}
}
отстраняване на грешки в тази част от кода, всичко изглежда наред, проблемът идва сега ...
след зареждането на изображенията искам да ги покажа в потребителския интерфейс едно по едно. Използвам диспечер, за да го направя, но винаги получавам съобщението, което ми казва, че извиканата нишка няма достъп до обекта, защото принадлежи на друга нишка.
public void display(BlockingCollection<BitmapImage> results)
{
foreach (BitmapImage item in collection.GetConsumingEnumerable())
{
this.Dispatcher.BeginInvoke(new Action(() =>
{
this.dstSource.Source = item;
Thread.Sleep(250);
}), DispatcherPriority.Background);
}
}
debug обвинява, че грешката е тук
this.dstSource.Source = item;
Опитвам всичко, но не мога да разбера какво не е наред. Някой има ли идея?