gpt4 book ai didi

C#:使用单独的线程填充 UI

转载 作者:行者123 更新时间:2023-11-30 13:21:06 25 4
gpt4 key购买 nike

我正在尝试从我收到的应用程序中找出一些意义,以便追踪错误的来源。有一些代码(此处已简化)创建四个线程,这些线程依次填充主窗体上的 ListView 。每个方法都从数据库中获取数据并从资源 dll 中检索图形,以便直接填充图像列表和 ListView 。

根据我在此处阅读的内容 (link),不应从 UI 线程以外的任何线程更新 UI 元素,但这似乎有效?

Thread t0 = new Thread(new ThreadStart(PopulateListView1));
t0.IsBackground = true;
t0.Start();

Thread t1 = new Thread(new ThreadStart(PopulateListView2));
t1.Start();

Thread t2 = new Thread(new ThreadStart(PopulateListView3));
t2.Start();

Thread t3 = new Thread(new ThreadStart(PopulateListView4));
t3.Start();

错误本身是一个 System.InvalidOperationException“无法将图像添加到 ImageList。”这让我想知道上面的代码是否以某种方式链接。

是否推荐使用这种填充 UI 的方法,如果不推荐,可能会导致什么并发症?

更新:

我可能通过引用“表单”给出了一些错误信息。该应用程序是一个 Windows 窗体应用程序,但代码来自基于用户控件的插件应用程序。线程是在该控件公开公开的初始化方法中创建的。 ListView 等也是此插件用户控件的一部分。

最佳答案

  • 不要为此使用线程 - 如果您必须执行异步操作,请在 THreadPool 上使用 WOrkItems。对于长时间运行的项目,通常应保留线程使用 - THreadPool 或新的 .NET 4.0 任务 API 更适合这种情况。

  • UI 元素应该只从元素创建线程中被命名。它“有效”与否取决于您使用的 .net 框架版本,或者如果您破坏它,控件的真正含义。

关于C#:使用单独的线程填充 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2802387/

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