跨线程操作无效:从创建它的线程以外的线程访问控制“dataGridView1”[重复]

2024-04-28

我有一个 Windows 表单,需要很长时间才能将数据加载到我的 datagridview 中。

我不断收到这一行的错误:

    dataGridView1.Rows.Add(row);

跨线程操作无效:控制“dataGridView1”是从创建它的线程以外的线程访问的。

这是我的代码:

    public List<string> _checked = new List<string>();

    private void getBarcodProperty()
    {                
        string query = "select Name from RfidUnic where Barcode = @barcode";

        while (true)
        {
            while (_checked.Count > 0)
            {
                SQLiteCommand cmd = new SQLiteCommand(query, sqliteConnection);
                cmd.Parameters.AddWithValue("@barcode", _checked[0]);
                sqliteConnection.Open();

                SQLiteDataReader da = cmd.ExecuteReader();

                if (da.Read())
                {
                    if (!da.IsDBNull(0))
                    {
                        string[] row = new string[] { da[0].ToString(), "1", _checked[0] };
                        dataGridView1.Rows.Add(row);
                        _checked.RemoveAt(0);
                    }
                }
                else
                {
                    string[] row = new string[] { "empty", "1", _checked[0] };
                    dataGridView1.Rows.Add(row);
                    _checked.RemoveAt(0);
                }

                sqliteConnection.Close();
            }
        }
    }

请告诉我哪里出错了

Thanks


您的“getBarcodProperty”函数是从另一个线程而不是从UI线程调用的,并且您尝试在该方法中访问datagridview,因此它产生了问题。

有两种方法可以解决问题。

  1. 在您的加载方法“RFID_Load(object sender, EventArgs e)”中添加此行作为第一行。 (在这种情况下,您不必更改任何代码)

Control.CheckForIllegalCrossThreadCalls = false;

更多详情 :http://dotnetstep.blogspot.in/2009/09/cross-thread-operation-not-valid.html http://dotnetstep.blogspot.in/2009/09/cross-thread-operation-not-valid.html

  1. 另一种解决方案是使用委托。

dataGridView1.Invoke(new Action(() => { dataGridView1.Rows.Add(行); }));

注意:对于每个调用,您都必须执行相同的操作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

跨线程操作无效:从创建它的线程以外的线程访问控制“dataGridView1”[重复] 的相关文章

随机推荐

  • 向 yii2 活动记录模型添加不在数据库中的属性

    我有一个 mySQL 数据库 其中有一个表videos和两列 开始时间 and end time 其格式为2017 01 24 15 38 11 我有一个活动记录模型Videos延伸 yii db ActiveRecord我想添加一些数据库
  • PHP上传图片

    好吧 我在这方面投入了很多时间 我是 PHP 编程新手 并试图掌握基础知识 但我有点迷失 因为昨晚我能够获得一个 PHP 表单来将基本数据 如名称地址和其他内容 上传到我的 MySQL 服务器 但今天我说让我们进行下一步 将图像发送到服务器
  • 使用 Servlet 启动 VLC HTTP Stream 时出现问题

    我正在为自己开发一个 VLC 项目 我的目标是创建一个 HTML 前端来启动流 我通过使用 Java Servlet 来完成此操作 概述 乌班图13 04 Java 7 21 冰茶 2 3 9 Eclipse JAVAEE IDE 雄猫7
  • 汇编语言中的全局_start是什么?

    这是我的汇编级代码 section text global start start mov eax 4 mov ebx 1 mov ecx mesg mov edx size int 0x80 exit mov eax 1 int 0x80
  • 将参数传递给 psql 过程脚本

    我有一个循环命令脚本psql看起来像这样 脚本 sql DO DECLARE data rec RECORD r RECORD r2 RECORD BEGIN select mytables data id into data rec fr
  • 如何将砌体项目居中?

    我已经设置了砌体来显示项目 如下所示 list masonry itemSelector propitem columnWidth 230 这有效 但所有项目 propitem 向左浮动 例如 如果我的容器 list宽度为 600 像素 左
  • tar 命令在提取时更改所有者:组

    使用此命令提取文件时tar zxf bluez arm package tgz文件和目录的所有者 1000 组 脉冲 是 更改如下例 Example drwxrwxr x 4 1000 pulse 1024 Jul 21 00 32 dbu
  • Marionette.View 中 UI 元素的可用性

    我只是想了解 Backbone Marionette 关于 UI 元素的观点背后的决定 在现有 DOM 元素上实例化 Marionette View 时 如下所示 view new Marionette ItemView el elemen
  • T-SQL 跳过获取存储过程

    我在这个网站上似乎运气不太好 但我仍然是个乐观主义者 我会继续努力 我有两个表 期刊和文章类别 使用此查询连接 SELECT Journals JournalId Journals Year Journals Title ArticleCa
  • 在 Prolog 中动态拆分列表

    我从序言开始几周 但我看到了更深入的操作列表的递归谓词的构造 我的问题是 是否可以构建一个谓词 将给定列表拆分为给定数量的其他列表 比如我想象的 split H T NumberLists Lists 递归实现 split 1 2 3 4
  • 隐藏 asp 单选按钮文本

    我有一个 asp 单选按钮 我想在 javascript 中将其可见性设置为 false
  • 发生异常后不刷新会话 - NHibernate

    我正在 NET 3 5 NHibernate 下开发一个 ASP NET MVC Web 应用程序 并托管在 Windows Azure 上 当 web 应用程序从本地开发结构运行时 它可以正常工作 然而 当我将其移动到 Windows A
  • Eclipse WTP 与 Tomcat 中干净工作目录和干净工作目录之间的区别

    我正在使用 Eclipse 进行 Java Web 开发 我安装了 WTP 和 Tomcat 我通过 Eclipse 运行 Tomcat 这是一个非常标准的配置 我想了解的是 当您右键单击 服务器 选项卡中的服务器时 它会为您提供两个选项
  • Pytorch Tensor 如何获取元素索引? [复制]

    这个问题在这里已经有答案了 我有 2 个名为x and list它们的定义如下 x torch tensor 3 list torch tensor 1 2 3 4 5 现在我想获取元素的索引x from list 预期输出是一个整数 2
  • 如何从 C# 中的显示名称获取 Active Directory 中的用户名?

    我希望能够使用 Active Directory 中用户的显示名称来获取该用户的用户 ID 显示名称是从数据库中获取的 并且已在该用户会话期间使用以下代码来存储以获取显示名称 using System DirectoryServices A
  • Dim As New 与 Dim / Set 有什么区别

    在 VBA 中 我可以通过以下两种方式之一创建对象 First way Dim myCol1 As New Collection Second way Dim myCol2 As Collection Set myCol2 New Coll
  • 可以通过robotium在测试用例中打开/关闭wifi吗

    我们可以在 Robotium 的测试用例中打开 关闭设备的 Wi Fi 吗 因为我正在测试一个问题 需要在初始阶段打开 wifi 然后关闭 wi fi 并继续测试 是的 你可以做到 请参阅示例 公共无效testNoNetworkConnec
  • “res.render”有什么作用,html 文件是什么样的?

    什么是res render做什么 html 文件是什么样的 我的最终目标是将文本文件中的任意逗号分隔值加载到 html 文件中 例如 我只能推断视图是 html 文件 并且回调返回该 html 文件 这是文档 http expressjs
  • ruby 2.1.2超时仍然不是线程安全的吗?

    我有 50 个 sidekiq 线程在网络上爬行 几周前 这些线程在运行大约 20 分钟后开始挂起 当我执行回溯转储时 大多数线程都卡在 net http 初始化上 app vendor ruby 2 1 2 lib ruby 2 1 0
  • 跨线程操作无效:从创建它的线程以外的线程访问控制“dataGridView1”[重复]

    这个问题在这里已经有答案了 我有一个 Windows 表单 需要很长时间才能将数据加载到我的 datagridview 中 我不断收到这一行的错误 dataGridView1 Rows Add row 跨线程操作无效 控制 dataGrid