C# 跨线程访问ListView
“System.InvalidOperationException”类型的未经处理的异常在System.Windows.Forms.dll中发生其他信息:线程间操作无效:...
“System.InvalidOperationException”类型的未经处理的异常在 System.Windows.Forms.dll 中发生
其他信息: 线程间操作无效: 从不是创建控件“listView1”的线程访问它。
我想在多线程获取listView1.Items[x].SubItems[y].Text的值 展开
其他信息: 线程间操作无效: 从不是创建控件“listView1”的线程访问它。
我想在多线程获取listView1.Items[x].SubItems[y].Text的值 展开
1个回答
展开全部
加上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);
}
}
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询