首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在独立线程上使用rows.insert的奇怪行为

在独立线程上使用rows.insert的奇怪行为
EN

Stack Overflow用户
提问于 2014-01-24 12:42:15
回答 1查看 56关注 0票数 1

我在vb.net中创建了一个简单的vb.net应用程序,它读取csv文件并将其内容显示在DataGridView组件中。下面是我在主ui线程上运行的代码。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
For Each line In fileinput
  Dim elements = line.Split(",")
  DataGridView1.rows.insert(0,elements)
Next

以上代码在主窗体线程上运行良好。元素数组用于填充每一行中的所有单元格,但是如果我在单独的线程上尝试使用相同的代码,那么在每一行的第一个单元格中得到的全部都是System.String[]。有人知道为什么会这样吗?

下面是在一个新线程上创建和运行的整个代码:

文件名为String = "“

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Private Sub BtnCsv_Click(sender As Object, e As EventArgs) Handles BtnCsv.Click

    Opf.ShowDialog()
    Filename = Opf.FileName

    Dim t As Thread
    t = New Thread(AddressOf Me.ParseFileThread)
    t.Start()



End Sub

Public Sub ParseFileThread()

    'RtfOut.Text = Filename

    'Read All Lines From The File since Its a csv
    Dim inputFile() = File.ReadAllLines(Filename)
    'The first line contains the headers for the csv file
    Dim headers() = inputFile(0).Split(",")

    SetGridHeaders(headers)
    SetDataGrid(inputFile)

End Sub

Public Delegate Sub SetGridHeadersDelegate(ByVal headers As Array)

Public Sub SetGridHeaders(ByVal headers As Array)
    If Dgv.InvokeRequired Then
        Dgv.BeginInvoke(New SetGridHeadersDelegate(AddressOf SetGridHeaders), headers)
    Else
        For Each header In headers
            Dgv.Columns.Add(header, header)
            Dgv.Refresh()
        Next
    End If
End Sub

Public Delegate Sub SetDataGridDelegate(ByVal values As Array)

Public Sub SetDataGrid(ByVal values As Array)
    If Dgv.InvokeRequired Then
        Dgv.BeginInvoke(New SetDataGridDelegate(AddressOf SetDataGrid), values)
    Else
        For Each line In values
            Dim cells = line.Split(",")
            Dgv.Rows.Insert(0, cells)
            Dgv.Refresh()
        Next
    End If
End Sub
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-24 12:53:34

试试这个:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Me.Invoke(Sub()
          DataGridView1.Rows.Insert(0, elements)
          End Sub)

当您在活动UI线程上更改控件时,需要在该线程内部发生更改,否则会遇到问题。我感到惊讶的是,代码执行时没有抛出异常。

Me.Invoke将确保在主线程上填充数据。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21342125

复制
相关文章
delete的奇怪行为
F的实例拥有一个value属性,但不希望在new的时候就初始化属性值(因为这个值不一定用得到,而且计算成本比较高,或者new的时候还不一定能算出来),那么自然想到通过定义getter来实现“按需计算”:
ayqy贾杰
2019/06/12
2.3K0
在游戏上使用面向目标行为规划系统
本文为本人的翻译文章,原文《Applying Goal-Oriented Planning for Games 》连接为: http://alumni.media.mit.edu/~jorkin/GOAP_draft_AIWisdom2_2003.pdf Jeff Orkin – Monolith Productions http://www.jorkin.com ---- 有相当数量的游戏已经实现了带有目标导向决策能力的角色。一个目标导向的角色能显示出一些智能的权衡,他们通过自主决定激活一些行为,这
韩伟
2018/03/05
1.4K0
在游戏上使用面向目标行为规划系统
【译】在正确的线程上观察
尽管很多人了解RxJava的基本逻辑,但是在Observable链和操作符究竟运行在哪个线程,仍然会有许多困惑。
用户1740424
2018/07/23
5150
【译】在正确的线程上观察
如何使用Certbot独立模式检索我们在Ubuntu 18.04上加密SSL证书
Let's Encrypt是一种通过自动API提供免费SSL证书的服务。最受欢迎的Let's Encrypt客户端是EFF的Certbot。
丰一川
2018/10/25
1.5K0
JVM中的线程行为
线程化是指同时执行程序过程以提高应用程序性能的实践。虽然直接在业务应用程序中使用线程并不常见,但它们一直在Java框架中使用。
银河1号
2019/04/12
1.1K0
JVM中的线程行为
BackgroundWorker在单独的线程上执行操作
直接使用多线程有时候会带来莫名其妙的错误,不定时的发生,有时候会让程序直接崩溃,其实BackgroundWorker 类允许您在单独的专用线程上运行操作。可以通过编程方式创建 BackgroundWorker,也可以将它从“工具箱”的“组件”选项卡中拖到窗体上。如果在 Windows 窗体设计器中创建 BackgroundWorker,则它会出现在组件栏中,而且它的属性会显示在“属性”窗口中。
张果
2022/05/09
1.2K0
BackgroundWorker在单独的线程上执行操作
在 Debian 10 上独立安装MySQL数据库
有很多VPS的客户并不是全部都喜欢宝塔系统,所以我们单独测试了此模式用于很多客户的数据备份,具体安装细节如下:
Nyarime
2022/06/12
2.7K0
在 Debian 10 上独立安装MySQL数据库
taskscheduler java_java – taskScheduler池的奇怪行为「建议收藏」
我有两个弹簧启动应用程序(1.4.3.RELEASE),它们位于同一台服务器上.应用程序A是一个单一的应用程序,其中包含用于处理警报的部分代码,而应用程序B是一个仅处理警报的新专用应用程序.这里的目标是打破小应用程序中的monolotic应用程序.现在,这两个代码一起运行,因为我有旧系统,总是调用应用程序A.
全栈程序员站长
2022/11/10
1.8K0
使用Vagrant在你的电脑上构建独立的虚拟开发环境
Techeek
2018/01/08
1.2K0
eBPF在android上的使用
eBPF是extended BPF的缩写,而BPF是Berkeley Packet Filter的缩写。对linux网络比较熟悉的伙伴对BPF应该比较了解,它通过特定的语法规则使用基于寄存器的虚拟机来描述包过滤的行为。比较常用的功能是通过过滤来统计流量,tcpdump工具就是基于BPF实现的。而eBPF对它进行了扩展来实现更多的功能。
刘盼
2021/02/12
4.5K0
eBPF在android上的使用
在MAC上安装vue-cli脚手架的奇怪的问题解决
今天一天都在搞Vue,因为想用Element-UI,实在是好看,使用npm安装vue-cli的时候报了无数个npm WARN checkPermissions
紫旭Blog - blog.zixutech.cn
2020/01/01
9680
MongoDB在Android上的使用体验
【说明】:MongoDB也可以在iOS上面使用,我是做安卓开发的,本文只讲解MongoDB在Android上面的使用,iOS的使用情况请上MongoDB官网自行查阅。
AWeiLoveAndroid
2019/09/20
3.7K0
MongoDB在Android上的使用体验
细说shiro之三:在独立应用中使用shiro
1. 下载 在非Web环境的独立应用中使用Shiro时,只需要shiro-core组件。 在Maven项目中的依赖配置如下:
编程随笔
2019/09/11
4130
细说shiro之三:在独立应用中使用shiro
ProGuard 在 Android 上的使用姿势
原文地址:Troubleshooting ProGuard issues on Android 原文作者:Wojtek Kaliciński 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m… 译者:dieyidezui 校对者:corresponding 为什么使用 ProGuard ProGuard 是一个压缩、优化、混淆代码的工具。尽管有很多其他工具供开发者们使用,但是 ProGuard 作为 Android Gradle 构建过程的一部分,已经打包在 SDK 中
Android 开发者
2018/05/31
2.6K0
在多线程中使用spring的bean
在多线程中使用spring的bean可以方便地使用spring管理的配置文件,以便于更好地使用spring框架。通过封装spring提供工具,可以手动获得spring管理的bean,以便于多线程环境中的使用。同时,xml中配置很关键,需要使用spring加载时感知,否则无法获取到spring管理的bean。
杉枫
2017/12/26
7830
在 Linux 上使用 BusyBox
它的所有命令都被编译到一个二进制文件里(busybox),它的手册只有 81 页(根据我对 man 送到 pr 管道的计算),但它涵盖了近 400 条命令。作为一个例子的比较,这是 “原版” 的 useradd —help 的输出:
用户8989785
2021/10/13
2.7K0
在 Kubernetes 上使用 Jenkins
有几种方法可以在 DevOps 环境中管理您的云基础架构。DevOps 是一种鼓励快速流动的应用程序开发以及促进 IT 团队开发、测试、发布过程无缝无缝衔接的方法。
kubernetes中文社区
2019/09/09
4.1K1
在 Linux 上使用 Multitail
当你想同时查看多个文件(尤其是日志文件)的活动时,multitail 命令会非常有用。它的工作方式类似于多窗口形式的 tail -f 命令。也就是说,它显示这些文件的底部和添加的新行。虽然通常使用简单,但是 multitail 提供了一些命令行和交互式选项,在开始使用它之前,你应该了解它们。
用户8639654
2021/09/22
1.9K0
python中的进程与线程基本使用(上)
本系列课程是针对无基础的,争取用简单明了的语言来讲解,学习前需要具备基本的电脑操作能力,准备一个已安装python环境的电脑。如果觉得好可以分享转发,有问题的地方也欢迎指出,在此先行谢过。
叶子陪你玩
2020/04/09
1.1K0
python中的进程与线程基本使用(上)
在window上使用cmake
本文由腾讯云+社区自动同步,原文地址 https://stackoverflow.club/using-msys-make-in-windows/
羽翰尘
2019/11/19
1.5K0

相似问题

使用p线程的奇怪行为

25

使用onClickListener的奇怪线程行为

12

奇怪的线程行为

12

奇怪的线程行为

31

线程的奇怪行为

14
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文