分類:[.NET 全般]
VBを使い、取得した画像を複数のスレッドから参照するプログラムを書いています。
今のところ、
1、ネット上から画像を取得
2、メインスレッドで画像のキャッシュを保存しておくクラスへ画像を渡し、更新をお願いする
3、キャッシュのクラスが更新を完了したのち、そのまま(メインスレッド)RaiseEventで更新完了の通知
4、イベントを受け取った各画像処理クラス(それぞれ別スレッド)が画像を取得し各処理を行う
となっているのですが、キャッシュに画像を取得しに来る各処理クラスがそれぞれ違うスレッドのため、スレッドセーフを行う必要があります。
Public Function GetImg(ByVal type As IMGTYPE) As Bitmap
Dim img As Bitmap
Try
' リーダーロックを取得
rwLock.AcquireReaderLock(Timeout.Infinite)
img = New Bitmap(cashlist.Item(IMGTYPE)) 'cashlistは画像をキャッシュしておくDictionary型
Finally
rwLock.ReleaseReaderLock()
End Try
Return img
End Function
そこで画像を返す関数を上記のように書いたのですが、 img = new Bitmap(...のところで
"オブジェクトは現在他の場所で使用されています"とエラーが出てしまいました。
マルチスレッドは苦手なのでいまいちこの手の処理をどう書けばよいのかわかりません。
改善点を教えてください。よろしくお願いします。
VB
Visual Studio 2015
|