C# 跨线程访问ListView

“System.InvalidOperationException”类型的未经处理的异常在System.Windows.Forms.dll中发生其他信息:线程间操作无效:... “System.InvalidOperationException”类型的未经处理的异常在 System.Windows.Forms.dll 中发生
其他信息: 线程间操作无效: 从不是创建控件“listView1”的线程访问它。
我想在多线程获取listView1.Items[x].SubItems[y].Text的值
展开
 我来答
freeeeeewind
推荐于2016-10-21 · TA获得超过1万个赞
知道大有可为答主
回答量:3227
采纳率:94%
帮助的人:1320万
展开全部

加上Control.CheckForIllegalCrossThreadCalls = false;

using System;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            // 加上这句!
            Control.CheckForIllegalCrossThreadCalls = false; 
        }
        // ……
    }
}
更多追问追答
追问
有其他方法吗?
追答
using System;
using System.Windows.Forms;
using System.Threading;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            Thread t = Thread(WorkThread);
            t.IsBackground = true;
            t.Start();
        }
        void WorkThread()
        {
            while (true)
            {
                // 更新TreeView(添加新的节点)
                UpdateTreeView(DateTime.Now.ToString("HH:mm:ss"));
                System.Threading.Thread.Sleep(5000);
            }
        }

        delegate void AddItemDelegate(string s);
        
        void UpdateTreeView(string s)
        {
            // 如果需要跨线程刷新
            if (treeView1.InvokeRequired)
            {
                AddItemDelegate del = UpdateTreeView;
                treeView1.Invoke(del, s);
            }
            else  // 如果不需要跨线程刷新,直接对treeView1操作
            {
                treeView1.Nodes.Add(s);
            }
        }
    }
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式