加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 为什么我收到此错误:“跨线程操作无效:控制从其创建的线

发布时间:2020-12-16 01:21:20 所属栏目:百科 来源:网络整理
导读:这让我感到困惑,也许有人可以用我的无知来照亮教育之光.这是在C# windows应用程序中.我从一个线程访问列表框的内容.当我尝试像这样访问它 prgAll.Maximum = lbFolders.SelectedItems.Count; 我收到了错误.但是,这是我没有得到的部分.如果我注释掉那一行,那就
这让我感到困惑,也许有人可以用我的无知来照亮教育之光.这是在C# windows应用程序中.我从一个线程访问列表框的内容.当我尝试像这样访问它

prgAll.Maximum = lbFolders.SelectedItems.Count;

我收到了错误.但是,这是我没有得到的部分.如果我注释掉那一行,那就是下一行

foreach (string dir in lbFolders.SelectedItems)

执行得很好.

编辑:
像往常一样,我缺乏沟通技巧.让我澄清一下.

我知道从除了创建它们之外的线程访问GUI项会导致问题.我知道访问它们的正确方法是通过委托.

我的问题主要是这样的:
为什么我可以正常访问和迭代SelectedItems对象,但是当我尝试获取(未设置)它的Count属性时,它会爆炸.

解决方法

prgAll.Maximum = lbFolders.SelectedItems.Count;

在该行上执行赋值(set / add),默认情况下不是线程安全的.

在第二行,它只是一个get操作,其中线程安全无关紧要.

编辑:我不是指访问prgAll元素.

访问Count属性会更改ListBox内部集合的内部状态,这就是它抛出异常的原因.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读