跨线程操作无效:从其他线程访问 'listBox1' 控件而不是它创建的线程。

13 浏览
0 Comments

跨线程操作无效:从其他线程访问 'listBox1' 控件而不是它创建的线程。

这个问题已经有了答案:

可能是重复的:

在另一个线程上访问控件之前已停止跨线程操作

当我尝试向ListBox添加项目时,我收到了以下错误:

在该线程上创建控件之外的线程访问了控件\'listBox1\',这是不允许的。

这是我尝试过的代码:

private void Form1_Load(object sender, EventArgs e)
{
    Jid jd = new Jid("USERNAME");
    xmpp.Open(jd.User, "PASSWORD");
    xmpp.OnLogin += new ObjectHandler(xmpp_OnLogin);
    agsXMPP.XmppConnection p;
    xmpp.OnPresence += new PresenceHandler(xmpp_OnPresence);
}
void xmpp_OnPresence(object sender, Presence pres)
{
    listBox1.Items.Add(pres.From .User ); --- **HERE I AM GETTING ERROR.**
}

我在C#和线程方面还有一些基础知识,我在谷歌上查找了许多文章,包括SO,但是我仍然不知道如何解决问题。

admin 更改状态以发布 2023年5月24日
0
0 Comments

在除UI线程之外的任何其他线程上,您都无法触摸UI控件。当出现错误时,OnPresence处理程序将在单独的线程上调用。您需要使用Invoke()或BeginInvoke()使listbox.Items.Add调用在UI线程上发生,例如,参见
http://weblogs.asp.net/justin_rogers/pages/126345.aspx

0
0 Comments

试一下这个

void xmpp_OnPresence(object sender, Presence pres)
    {
  this.Invoke(new MethodInvoker(delegate()
                {
listBox1.Items.Add(pres.From .User ); --- **HERE I AM GETTING ERROR.**
   }));
}

0