我正在WPF中的单独STA线程上创建控件,并且想要将它添加到列表中,然后使用list和itemssource作为项目控件。在单独的线程上创建控件,然后添加到WPF中的项目源
我的代码运行良好,直到我尝试显示控件。我收到一个错误,说一个不同的线程拥有这个列表。
我完全理解这是为什么,但想知道如何让它回到UI线程。
我重复代码:
For Each S In qry
Dim T As New System.Threading.Thread(AddressOf Loader)
T.SetApartmentState(System.Threading.ApartmentState.STA)
T.Start({S, AllBackgrounds})
Next
我的装载机子:
Private Shared Sub Loader(O As Object)
Dim ISC As New ImageSourceConverter
Dim SI As New StudioImage
SI.Source = ISC.ConvertFromString(O(0))
CType(O(1), List(Of StudioImage)).Add(SI)
End Sub
那么,怎样才能我得到的名单(共StudioImage)回到该UI线程?
你不能这样做。不要在WPF的程序代码中创建或操作UI元素。这就是XAML的用途。如果你想显示图像,确保你在Freezable上调用'.Freeze()',如果它是在后台线程上创建的。 –
为什么不看一下[Dispatcher](http://msdn.microsoft.com/zh-cn/library/system.windows.threading.dispatcher.aspx)类。这将允许您将数据传回您的UI线程。只是不要在另一个线程上创建UI元素并将它们传递过来,想想如何传递数据,而不是控件。 – Steve