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 展开
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 展开
1个回答
展开全部
跨线程访问对象是会报错的,如果要跨线程来操作,需要定义一个委托来执行指定的方法
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++;
}
}
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));
你线程中调用的函数和你写的函数名怎么不一样
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询