跨线程操作无效:从其他线程访问 'listBox1' 控件而不是它创建的线程。
跨线程操作无效:从其他线程访问 '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日
在除UI线程之外的任何其他线程上,您都无法触摸UI控件。当出现错误时,OnPresence处理程序将在单独的线程上调用。您需要使用Invoke()或BeginInvoke()使listbox.Items.Add调用在UI线程上发生,例如,参见
http://weblogs.asp.net/justin_rogers/pages/126345.aspx