gpt4 book ai didi

.net - 在另一个线程中使用 WPF 多边形

转载 作者:行者123 更新时间:2023-12-02 02:29:42 24 4
gpt4 key购买 nike

我在将类型为 Dictionary(Of Int16, Polygon) 的对象作为参数传递给后台工作人员时遇到问题,以便后台工作人员能够访问字典中的多边形。我收到典型的“调用线程无法访问此对象,因为另一个线程拥有它”消息。这是我所拥有的:

                Dim worker As New BackgroundWorker
AddHandler worker.DoWork, AddressOf MeasurePolygons
AddHandler worker.RunWorkerCompleted, AddressOf WorkerCompleted

worker.RunWorkerAsync(PolygonCollection)

PolygonCollection 是在类顶部声明的私有(private)变量,类型为 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.Item(CShort(i))) 上。任何帮助将非常感激。谢谢。

编辑:因此,这 2 位友好的海报帮助我缩小了问题范围,但我仍然不知道如何解决这个问题。

当前问题:我有一个类型为 Dictionary(Of Int16, Polygon) 的对象。我需要能够使用 BackgroundWorker 访问此 Dictionary 中在 UI 线程上创建的每个单独的多边形。然后在 backgroundworker 上,我将基于字典中的多边形创建一个位图文件。那么我怎样才能访问 backgroundworker 上的多边形呢?感谢您的帮助。

最佳答案

问题不在于Dictionary,问题在于存储在Dictionary 中的Polygon。这些是在 UI 线程中创建的 WPF UI 元素,因此只有 UI 线程可以使用它们。

您可以在 UI 线程中执行 Render 操作(使用 Dispatcher.Invoke)。这意味着渲染会阻塞您的 UI 线程,但至少 渲染操作之间,UI 线程将能够处理其他事情,即,如果需要时间,UI 应该保持响应单个渲染操作不会太长。

关于.net - 在另一个线程中使用 WPF 多边形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4226977/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com