У меня возникла проблема при передаче объекта типа Dictionary (Of Int16, Polygon) в качестве аргумента фоновому работнику, чтобы фоновый работник мог получить доступ к полигонам в Словаре.Я получаю типичное сообщение "Вызывающий поток не может получить доступ к этому объекту, потому что другой поток владеет им" сообщение.Вот что у меня есть:
Dim worker As New BackgroundWorker
AddHandler worker.DoWork, AddressOf MeasurePolygons
AddHandler worker.RunWorkerCompleted, AddressOf WorkerCompleted
worker.RunWorkerAsync(PolygonCollection)
PolygonCollection - это закрытая переменная, объявленная в верхней части класса, и она имеет тип Dictionary (Of Int16, Polygon).Он будет содержать 1-10 полигонов, и я хочу передать эту коллекцию фоновщику, потому что я делаю вычисления для каждого полигона в словаре.
Dim TempPolygonCollection As Dictionary(Of Int16, Polygon)
TempPolygonCollection = CType(e.Argument, Dictionary(Of Int16, Polygon))
For i = 0 To TempPolygonCollection.Count - 1
If TempPolygonCollection.ContainsKey(CShort(i)) Then
Dim rtb As New RenderTargetBitmap(CInt(800), CInt(600), 96D, 96D, PixelFormats.Default)
rtb.Render(TempPolygonCollection.Item(CShort(i)))
Dim encoder As New BmpBitmapEncoder
encoder.Frames.Add(BitmapFrame.Create(rtb))
End If
Next i
ошибка возникает в rtb.Render (TempPolygonCollection.Пункт (CShort (я))).Любая помощь могла бы быть полезна.спасибо.
РЕДАКТИРОВАТЬ: Таким образом, 2 дружественных плаката помогли мне сузить мою проблему, но я все еще застрял в том, как ее решить.
Текущая проблема: у меня есть объект типаСловарь (Int16, Полигон).Мне нужно иметь доступ к каждому отдельному полигону, который создается в потоке пользовательского интерфейса, внутри этого словаря с помощью BackgroundWorker.Затем в фоновом режиме я буду создавать растровый файл на основе многоугольника в словаре.Так как я могу получить доступ к полигонам на рабочем столе?Спасибо за любую помощь.