2011-07-14 24 views
3

可能重複創建線程其他:
Cross-thread operation not valid: Control accessed from a thread other than the thread it was created on.跨線程操作無效:從訪問控制「listBox1中」>線程比它是在

雖然我試圖將項目添加到列表框我在C#上收到以下錯誤。

跨線程操作無效:控制'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#有點新的,也有穿的,我用Google搜索和檢查過很多文章,包括SOF,但我仍然硝基甲苯知道漢王要解決的問題, 請幫幫我 。 謝謝。

+0

這個頁面有幾十個關於同一主題的問題。我只是選了一個。 –

回答

11

嘗試了這一點

void xmpp_OnPresence(object sender, Presence pres) 
    { 
    this.Invoke(new MethodInvoker(delegate() 
       { 

listBox1.Items.Add(pres.From .User); --- **HERE I AM GETTING ERROR.** 

    })); 
} 
+1

,謝謝你,先生,它的工作。 –

+1

不錯,乾淨。謝謝。 – papaiatis

1

您不能觸摸ui線程以外的任何其他線程上的ui控件。在出現錯誤時,OnPresence處理程序在單獨的線程上調用。你需要做的listbox.Items.Add通話發生在UI線程上,使用的invoke()或BeginInvoke的(),見例如如果你看一下右邊 http://weblogs.asp.net/justin_rogers/pages/126345.aspx

+0

感謝anders,@ Henk,SIR,我查了一些,但專業人員總是以一種嚴密的方式回答,所以icnt抓住它。感謝消息,我會檢查。 –

相關問題