从另一个线程填充列表视图

2023-11-30

我试图从另一个类填充列表视图,但出现此错误: “跨线程操作无效:控制‘listView1’是从创建它的线程以外的线程访问的。”

在我的课堂上,我像这样声明我的列表视图:

class CheckBlankPages
{

    public String[] pdfFiles
    { get; set; }

    ListView _ListVireRef;
    public int NrCRT = 1;


    public CheckBlankPages(String[] pdfFiles = null, ListView listView = null)
    {
        this.pdfFiles = pdfFiles;
        _ListVireRef = listView;

    }
    public void StartCheckingPDF()
    {
        foreach (string pdf in pdfFiles)
        {
            String[] itm = { (NrCRT++).ToString(), pdf };
            ListViewItem item = new ListViewItem(itm);
            _ListVireRef.Items.Add(item);
        }
    }
}

在我的 MainForm 中我使用以下代码:

DialogResult rezultat = openFileDialog1.ShowDialog();
        if (rezultat == DialogResult.OK)
        {

            CheckBlankPages ck = new CheckBlankPages(openFileDialog1.FileNames, listView1);
            Thread CheckPDFs = new Thread(new ThreadStart(ck.StartCheckingPDF));
            CheckPDFs.Start();
        }

怎么了?


通常我会这样做:

using System;
using System.Windows.Forms;

namespace TestWinFormsThreding
{
    class TestFormControlHelper
    {
        delegate void UniversalVoidDelegate();

        /// <summary>
        /// Call form control action from different thread
        /// </summary>
        public static void ControlInvoke(Control control, Action function)
        {
            if (control.IsDisposed || control.Disposing)
                return;

            if (control.InvokeRequired)
            {
                control.Invoke(new UniversalVoidDelegate(() => ControlInvoke(control, function)));
                return;
            }
            function();
        }
    }

    public partial class TestMainForm : Form
    {
    // ...
    // This will be called from thread not the same as MainForm thread
    private void TestFunction()
    {
        TestFormCotrolHelper.ControlInvoke(listView1, () => listView1.Items.Add("Test"));
    }   
    //...
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从另一个线程填充列表视图 的相关文章

  • 如何在加载.NET WinForm应用程序user.config文件时捕获异常?

    有时 在使用默认配置系统的 NET 2 0 WinForm 桌面应用程序中 user config文件将被损坏并且无法再加载 当配置系统尝试加载它时 它会抛出一个System Xml XmlException 抛开 为什么文件首先被损坏 的
  • 在 C 中匹配二进制模式

    我目前正在开发一个 C 程序 需要解析一些定制的数据结构 幸运的是我知道它们是如何构造的 但是我不确定如何在 C 中实现我的解析器 每个结构的长度都是 32 位 并且每个结构都可以通过其二进制签名来识别 举个例子 有两个我感兴趣的特定结构
  • 当我们想要返回对象的引用时,为什么我们在赋值运算符中返回 *this 而通常(而不是 this)?

    我正在学习 C 和指针 我以为我理解了指针 直到我看到这个 一方面 asterix 运算符是解引用的 这意味着它返回值所指向的地址中的值 而与号 运算符则相反 它返回值存储的地址记忆 现在阅读有关赋值重载的内 容 它说 我们返回 this因
  • 获取两个工作日之间的天数差异

    这听起来很简单 但我不明白其中的意义 那么获取两次之间的天数的最简单方法是什么DayOfWeeks当第一个是起点时 如果下一个工作日较早 则应考虑在下周 The DayOfWeek 枚举 http 20 20 5B1 5D 3a 20htt
  • 回发后刷新时提示确认表单重新提交。我做错了什么?

    我有一个以空白 默认状态启动的仪表板 我让用户能够将保存的状态加载到仪表板中 当他们单击 应用 按钮时 我运行以下代码 function CloseAndSave var radUpload find radUpload1ID var in
  • 如何使用 LINQ2SQL 连接两个不同上下文的表?

    我的应用程序中有 2 个数据上下文 不同的数据库 并且需要能够通过上下文 B 中的表的右连接来查询上下文 A 中的表 我该如何在 LINQ2SQL 中执行此操作 Why 我们正在使用 SaaS 产品来跟踪我们的时间 项目等 并希望向该产品发
  • 在 Visual Studio 2010 中从 Fortran 调用 C++ 函数

    我想从 Fortran 调用 C 函数 为此 我在 Visual Studio 2010 中创建了一个 FORTRAN 项目 之后 我将一个 Cpp 项目添加到该 FORTRAN 项目中 当我要构建程序时出现以下错误 Error 1 unr
  • 标准化 UTF-8 到底是什么?

    The 重症监护室项目 http userguide icu project org transforms normalization 现在也有一个PHP库 http us php net manual en class normalize
  • 具有交替类型的可变参数模板参数包

    我想知道是否可以使用参数包捕获交替参数模式 例如 template
  • DbContext 和 ObjectContext 有什么区别

    From MSDN 表示工作单元和存储库模式的组合 使您能够查询数据库并将更改分组在一起 然后将这些更改作为一个单元写回存储 DbContext在概念上类似于ObjectContext 我虽然DbContext只处理与数据库的连接以及针对数
  • Qt - ubuntu中的串口名称

    我在 Ubuntu 上查找串行端口名称时遇到问题 如您所知 为了在 Windows 上读取串口 我们可以使用以下代码 serial gt setPortName com3 但是当我在 Ubuntu 上编译这段代码时 我无法使用这段代码 se
  • C# 中的合并运算符?

    我想我记得看到过类似的东西 三元运算符 http msdn microsoft com en us library ty67wk28 28VS 80 29 aspx在 C 中 它只有两部分 如果变量值不为空 则返回变量值 如果为空 则返回默
  • 如果我使用客户端计算机上未安装的字体,会发生什么情况?

    有人可以告诉我 如果我在 WinForms 应用程序中使用目标计算机上不可用的字体 会发生什么情况 它是否使用同一系列的字体 只是 Sans Serif 还是其他字体 您的应用程序将回退到 Segoe UI Tahoma 然后是 MS Sa
  • 外键与独立关系 - Entity Framework 5 有改进吗?

    我读过了several http www ladislavmrnka com 2011 05 foreign key vs independent associations in ef 4 文章和问题 https stackoverflow
  • AES 128 CBC 蒙特卡罗测试

    我正在 AES 128 CBC 上执行 MCT 如中所述http csrc nist gov groups STM cavp documents aes AESAVS pdf http csrc nist gov groups STM ca
  • 使用管道时,如果子进程数量大于处理器数量,进程是否会被阻塞?

    当子进程数量很大时 我的程序停止运行 我不知道问题是什么 但我猜子进程在运行时以某种方式被阻止 下面是该程序的主要工作流程 void function int process num int i initial variables for
  • 按 Esc 按键关闭 Ajax Modal 弹出窗口

    我已经使用 Ajax 显示了一个面板弹出窗口 我要做的是当用户按 Esc 键时关闭该窗口 这可能吗 如果有人知道这一点或以前做过这一点 请帮助我 Thanks 通过以下链接 您可以通过按退出按钮轻松关闭窗口 http www codepro
  • 如果没有抽象成员,基类是否应该标记为抽象?

    如果一个类没有抽象成员 可以将其标记为抽象吗 即使没有实际理由直接实例化它 除了单元测试 是的 将不应该实例化的基类显式标记为抽象是合理且有益的 即使在没有抽象方法的情况下也是如此 它强制执行通用准则来使非叶类抽象 它阻止其他程序员创建该类
  • C++ 条件编译

    我有以下代码片段 ifdef DO LOG define log p record p else define log p endif void record char data 现在如果我打电话log hello world 在我的代码中
  • Oracle Data Provider for .NET 不支持 Oracle 19.0.48.0.0

    我们刚刚升级到 Oracle 19c 19 3 0 所有应用程序都停止工作并出现以下错误消息 Oracle Data Provider for NET 不支持 Oracle 19 0 48 0 0 我将 Oracle ManagedData

随机推荐

  • Dask Workers 有哪些活动线程?

    当运行 Dask 工作线程时 我注意到有一些额外的线程超出了我的预期 我应该看到 Dask Worker 运行多少个线程以及它们在做什么 Dask 工作线程有以下线程 用于运行任务的线程池 这通常介于 1 和计算机上逻辑核心的数量之间 一个
  • 排除错误消息中前置的属性名称

    我有一个简单的国际化 attributes user login Login errors template header Errors body models user attributes login taken The chosen
  • Gtk:如何检测EventBox上的鼠标位置?

    I have been trying to write simple CAD application in Python I was tinkering with pyglet got some results but I decided
  • 如何在 R corrgram 中添加轴标签?

    我想在 x 轴和 y 轴上有水平和垂直标签 请参阅以下伪代码 Henrik 对相关线程 2013 的评论是关于关闭对角线标签 然后尝试关联轴的标签 但我不想关闭对角线标签 您可以通过设置 labels NULL 来关闭对角线标签 然后您可以
  • 使用服务主体创建 Azure AD 应用程序时权限不足,无法完成操作

    按照此处概述的代码进行操作 https github com Azure Samples active directory dotnet graphapi console blob master GraphConsoleAppV3 Prog
  • 将纬度和经度点转换为 UTM

    我找到了一个相当简单的示例来说明如何执行此操作 但我无法让它为我工作 我对 R 还很陌生 library rgdal xy lt cbind c 118 119 c 10 50 project xy proj utm zone 51 ell
  • SmtpClient 类未从 Web.Config 文件中获取默认参数

    配置文件
  • 在 Ember.js #each 中生成循环计数器

    我发现 Ember js 中车把模板的限制绝对是严重的 你不能执行任意的 JavaScript 您获得的只是一组固定的能力 if else each action view outlet 以及输出当前上下文对象的属性值的能力 这意味着我无法
  • Java 线程优先级

    我的主线程有一个私有 LinkedList 其中包含游戏中玩家的任务对象 然后 我有一个单独的线程 每小时运行一次 用于访问和清除该 LinkedList 并运行我的算法 该算法随机向每个玩家 LinkedList 添加新的未完成任务 现在
  • 在Scrapy中禁用SSL证书验证

    我目前正在努力解决 Scrapy 遇到的问题 每当我使用 Scrapy 抓取证书 CN 值与服务器域名相匹配的 HTTPS 站点时 Scrapy 都表现出色 但另一方面 每当我尝试抓取证书 CN 值与服务器域名不匹配的网站时 我都会得到以下
  • 当子类中使用“new”时,JavascriptSerializer 序列化属性两次

    尝试创建一项服务来返回具有许多共享属性的对象 但在某些情况下一个属性应该受到高度限制 这会导致奇怪且不期望的行为 即在序列化输出中重复使用属性名称 从而导致浏览器中出现不正确的行为 这是一个可以粘贴到 LINQPad 中的示例 如果您添加对
  • 使用刷新令牌 adal js 获取新的访问令牌

    我正在使用在天蓝色广告中进行身份验证的应用程序 我使用 adal js 获取访问令牌 但访问令牌的有效期仅为 1 小时 那么如何使用 Adal js 中的刷新令牌在幕后获取新令牌呢 如果您能提供示例代码 我们将不胜感激 只要用户与 Azur
  • JMeter无法使用插件打开JMeter文件

    当我尝试打开保存的 jmx 时出现错误 我的备份已经一周了 我尝试遵循类似的问题 但也无法使用 JMeter 3 1 加载它 我安装了新的 JMeter 3 2 并安装了所有可用插件的插件 但仍然收到错误 2017 08 30 10 03
  • 使用 NSNotificationCenter 向另一个类发送通知

    所以我的目标是使用以下命令向另一个班级发送通知NSNotificationCenter 我也想通过object并通知对方class 我该怎么做 您必须先注册一个通知名称 NSNotificationCenter defaultCenter
  • C 语言翻译的 8 个阶段的海报

    有没有人参考过海报 单页 pdf 或类似的内容 其中包含 C 语言翻译的八个阶段的列表 第一个阶段是三字母翻译 我想打印一张挂在电脑旁边的墙上 更新 抱歉忘记指定 我对 C90 感兴趣 虽然 C99 可能非常接近 Pragma正如 PMG
  • R:如何在 ggplotly 中自定义桑基图?

    我有按年份和型号划分的销售数据 可以通过以下方式可视化桑基图 现在我正在努力处理两个问题 首先我需要设置模型B多年来 无论其价值如何 总是处于闲聊的底部 当我通过重新可视化 ggplot 时ggplotly hover不显示销售额或年份 c
  • Jenkins 管道 ansicolor 控制台输出

    我知道可以使用 AnsiColor 插件在控制台输出中显示颜色 我测试了下面的基本示例 This shows a simple build wrapper example using the AnsiColor plugin node Th
  • Python 迭代器没有ext() 吗?

    Python 迭代器有吗hasnext method 捕捉的替代方案StopIteration是使用next iterator default value 例如 gt gt gt a iter hi gt gt gt print next
  • Android:如何写入SQL数据库

    我一直在尝试遵循 newBoston 教程 但当我单击按钮将数据写入数据库时 发现出现运行时错误 LogCat 显示 在活动中找不到方法 addModuleButton View 有什么建议么 添加模块活动 public class Add
  • 从另一个线程填充列表视图

    我试图从另一个类填充列表视图 但出现此错误 跨线程操作无效 控制 listView1 是从创建它的线程以外的线程访问的 在我的课堂上 我像这样声明我的列表视图 class CheckBlankPages public String pdfF