BackgroundWorkerでBitmapSourceを扱うときの注意点。

このオブジェクトは別のスレッドに所有されているため、呼び出しスレッドはこのオブジェクトにアクセスできません。

BackgroundWorker.RunWorkerAsyncの引数にList<BitmapSource>型のリストを渡して、BackgroundWorker.OnDoWorkなどでBitmapSourceを取り出して処理を行う場合、単純に作成したBitmapSourceオブジェクトだと上記のエラーが発生する。

解決策としては、リストに入れる前にBitmapSource.Freezeメソッドを実行する。これでオブジェクトを別スレッドで共有できるようになる。

情報源は以下のスレッド。

stackoverflow.com