有什么办法可以在WPF中的两个STA线程之间使用对象?

亚历山德鲁

好吧,在任何人开始之前,让我清楚...

我使用的是自定义控件,在本例中为Telerik的RadPane。对这些窗格进行反序列化时,它们是通过一种回调方法进入的,因此,它们全部由一个线程拥有/反序列化,因此无法对其进行克隆或深度复制等。因此,我尝试使用一些巨大的限制。这很不好,因为我想向每个窗格添加内容,但希望它们全部在其自己的UI线程范围内工作。例如,我想将一个列表添加到窗格中,并用数百万条记录等更新它,但是如果更新一个窗格,则UI线程将锁定所有窗格。

我需要在另一个线程中创建该对象的内容,但是问题是,当我尝试设置内容时,一个明显的问题是该对象不属于拥有我的窗格的同一线程:

myRadPane.Content = myGrid;

myGrid由与myRadPane不同的线程拥有,因此它不想设置内容。在WPF中是否有解决此问题的方法,还是允许一个对象在UI线程之间“共享”的方法?

编辑:请注意,我完全了解调度程序的工作方式,并且每当主UI线程需要为一个窗格更新时,我的应用程序就会使用它们。但是,在这种情况下,即使在尽可能少地使用调度程序的情况下,UI线程也会在繁重的负载下陷入困境。

文森

您可以复制WPF控件。

在您的创建者线程中调用此命令:

    public string CopyWPFControl<T>(T source)
    {
        string childXaml = XamlWriter.Save(source);
        var stringReader = new StringReader(childXaml);
        return stringReader.ToString();
    }

将结果转移到分派器/ STA线程并调用:

    public T RecreateWPFControl<T>(string source)
    {
        var xmlReader = XmlReader.Create(source);
        var clonedChild = (T)XamlReader.Load(xmlReader);
        return clonedChild;
    }

因此,在“差异线程”中创建对象,然后复制Control及其所有Bindings并使用输出显示。

导入后,将仅复制XAML描述。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我可以在C中两个子进程之间使用相同的管道吗?

来自分类Dev

如何在Process.Start中的两个进程之间使用管道

来自分类Dev

有什么办法可以取消两个对象之间的引用绑定

来自分类Dev

在c ++ 11中,可以使用std :: atomic在两个线程之间传输非原子数据

来自分类Dev

在c ++ 11中,可以使用std :: atomic在两个线程之间传输非原子数据

来自分类Dev

Qt:在两个子线程之间使用信号和插槽

来自分类Dev

Unix管道是否仅限在两个进程之间使用?

来自分类Dev

如何在两个进程之间使用AIDL发送图像?

来自分类Dev

C-线程之间使用的结构中的字段

来自分类Dev

Indy TCP套接字可以在两个线程之间共享吗?

来自分类Dev

是否可以在两个线程之间共享相同的消息队列?

来自分类Dev

试图在两个线程之间创建死锁

来自分类Dev

在两个线程之间共享时间变量

来自分类Dev

澄清两个线程之间的死锁

来自分类Dev

如何在两个线程之间共享数据

来自分类Dev

有什么办法可以合并两个以上的视频?

来自分类Dev

在Codeigniter Active Record中在数组的两个对应元素之间使用AND以及在它们之间使用OR

来自分类Dev

使用什么 IPC 机制在两个 Python 进程之间共享 multiprocessing.Queue 中的数据?

来自分类Dev

为什么不撕?尝试编写一个示例程序,显示 Java 中两个线程之间的长时间撕裂

来自分类Dev

我可以跨Realm在线程之间使用被忽略的属性吗?

来自分类Dev

我可以在Realm的各个线程之间使用被忽略的属性吗?

来自分类Dev

如何使用TcpStream在2个线程之间使用异步拆分?

来自分类Dev

在.NET中的两个进程之间传递流对象/文件句柄

来自分类Dev

在.NET中的两个进程之间传递流对象/文件句柄

来自分类Dev

在Codeigniter Active Record中在Array的两个对应元素之间使用AND以及在Array的两个元素之间使用OR

来自分类Dev

在没有系统调用的线程之间使用std :: istream和std :: ostream(管道)

来自分类Dev

有没有办法可以从两个不同字符之间的文本小部件中获取文本?

来自分类Dev

在同一个C程序中的两个线程之间发送UDP消息(Linux)

来自分类Dev

如何在两个Inumerable之间使用Any

Related 相关文章

  1. 1

    我可以在C中两个子进程之间使用相同的管道吗?

  2. 2

    如何在Process.Start中的两个进程之间使用管道

  3. 3

    有什么办法可以取消两个对象之间的引用绑定

  4. 4

    在c ++ 11中,可以使用std :: atomic在两个线程之间传输非原子数据

  5. 5

    在c ++ 11中,可以使用std :: atomic在两个线程之间传输非原子数据

  6. 6

    Qt:在两个子线程之间使用信号和插槽

  7. 7

    Unix管道是否仅限在两个进程之间使用?

  8. 8

    如何在两个进程之间使用AIDL发送图像?

  9. 9

    C-线程之间使用的结构中的字段

  10. 10

    Indy TCP套接字可以在两个线程之间共享吗?

  11. 11

    是否可以在两个线程之间共享相同的消息队列?

  12. 12

    试图在两个线程之间创建死锁

  13. 13

    在两个线程之间共享时间变量

  14. 14

    澄清两个线程之间的死锁

  15. 15

    如何在两个线程之间共享数据

  16. 16

    有什么办法可以合并两个以上的视频?

  17. 17

    在Codeigniter Active Record中在数组的两个对应元素之间使用AND以及在它们之间使用OR

  18. 18

    使用什么 IPC 机制在两个 Python 进程之间共享 multiprocessing.Queue 中的数据?

  19. 19

    为什么不撕?尝试编写一个示例程序,显示 Java 中两个线程之间的长时间撕裂

  20. 20

    我可以跨Realm在线程之间使用被忽略的属性吗?

  21. 21

    我可以在Realm的各个线程之间使用被忽略的属性吗?

  22. 22

    如何使用TcpStream在2个线程之间使用异步拆分?

  23. 23

    在.NET中的两个进程之间传递流对象/文件句柄

  24. 24

    在.NET中的两个进程之间传递流对象/文件句柄

  25. 25

    在Codeigniter Active Record中在Array的两个对应元素之间使用AND以及在Array的两个元素之间使用OR

  26. 26

    在没有系统调用的线程之间使用std :: istream和std :: ostream(管道)

  27. 27

    有没有办法可以从两个不同字符之间的文本小部件中获取文本?

  28. 28

    在同一个C程序中的两个线程之间发送UDP消息(Linux)

  29. 29

    如何在两个Inumerable之间使用Any

热门标签

归档