C# treeview 多线程控制 报错的问题

我已经加入了privatevoidForm1_Load(objectsender,EventArgse){Control.CheckForIllegalCrossThre... 我已经加入了
private void Form1_Load(object sender, EventArgs e)
{

Control.CheckForIllegalCrossThreadCalls = false;

Thread t = new Thread(new ThreadStart(clientlistener));
t.IsBackground = true; // 设置为后台线程,在主窗口退出时线程强制退出
t.Start();
}

可线程中调用涵数 还是会报错
public void addarea(ccc m)
{
int i = 0;
while (m.m_string[i] != null)
{
treeView1.Nodes.Add(m.m_string[i]);
i++;
}
}

未处理 System.InvalidOperationException
Message="在该控件上执行的操作正从错误的线程调用。使用 Control.Invoke 或 Control.BeginInvoke 封送到正确的线程才能执行此操作。"

请问怎么解决w
展开
 我来答
307482311
2013-03-29 · TA获得超过1471个赞
知道小有建树答主
回答量:388
采纳率:0%
帮助的人:311万
展开全部
跨线程访问对象是会报错的,如果要跨线程来操作,需要定义一个委托来执行指定的方法

public delegate void MyMethod();  //声明一个委托,以使其它线程访问

private void Form1_Load(object sender, EventArgs e)
{
Control.CheckForIllegalCrossThreadCalls = false;

Thread t = new Thread(new ThreadStart(change));
t.IsBackground = true; // 设置为后台线程,在主窗口退出时线程强制退出
t.Start();
}

//其它线程调用写好的方法
void change()
{
MyMethod mt = new MyMethod(this.addarea);
this.Invoke(mt);  //在当前线程,调用mt
}

//这是你写的方法

public void addarea(ccc m)
{
int i = 0;
while (m.m_string[i] != null)
{
treeView1.Nodes.Add(m.m_string[i]);
i++;
}
}
更多追问追答
追问
错误1“addarea”的重载均与委托“WindowsServer.Form1.MyMethod”不匹配
追答
Thread t = new Thread(new ThreadStart(clientlistener));

你线程中调用的函数和你写的函数名怎么不一样
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式