これが私の問題です。
BlockingCollection にいくつかの BitmapImages をロードしています
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);
}
}
コードのこの部分をデバッグするとすべて問題ないように見えますが、問題は今発生しています...
画像の読み込みが完了したら、UI に 1 つずつ表示したいと思います。そのためにディスパッチャーを使用していますが、呼び出されたスレッドは別のスレッドに属しているため、オブジェクトにアクセスできないというメッセージが常に表示されます。
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);
}
}
デバッグは、エラーがここにあると非難します
this.dstSource.Source = item;
私はすべてを試していますが、何が間違っているのかわかりません。誰でも何か考えがありますか?