2013-01-09 32 views
5

爲了嘗試抓住線程,我嘗試了猴子看到猴子做,並從MSDN上的THIS_PAGE複製(如讀取和鍵入,而不是剪切和粘貼)。線程,複製,錯誤,SetTextCallback

當我這樣做,我得到了以下錯誤

錯誤2類型或命名空間名稱「SetTextCallback」找不到(是否缺少using指令或程序集引用?)Form1.cs中385 17 ZYX987

錯誤3類型或命名空間名稱「SetTextCallback」找不到(是否缺少using指令或程序集引用?)Form1.cs的385 41 ZYX987

我向下滾動贈品在網頁上並發現很多社區評論表明每個人都有完全相同的問題,因爲這個例子有誤導性。即從未聲明SetTextCallback

這是同時在MSDN頁面盯着我輸入的山寨版...

private void SetText(string text) 
{ 
    // InvokeRequired required compares the thread ID of 
    // the calling thread to the thread ID of the 
    // creating thread. If these threads are different, 
    // it returns true 
    if (this.label1.InvokeRequired)      
    { 
     SetTextCallback d = new SetTextCallback(SetText); 
     this.Invoke(d, new object[] { text }); 
    } 
    else 
    { 
     this.label1.Text = text; 
    } 
} 

請問這裏有人請建議,我應該把我的CopyCatCode SetTextCallback

第二個問題:聲明它的語法是什麼樣的?

第三個問題:如果SetTextCallback是一個方法,那麼應該是什麼呢?

我在Stack Overflow的這裏搜索了「... SetTextCallback ...」(沒有引號),並找到了一些引用,但沒有確切的問題。希望這是屬於這裏的那種問題。謝謝閱讀。

回答

10

向下滾動您鏈接到( 「How to: Make Thread-Safe Calls to Windows Forms Controls」)的MSDN頁面中獲益,完整的源列在底部。你會發現那裏的定義:

// This delegate enables asynchronous calls for setting 
    // the text property on a TextBox control. 
    delegate void SetTextCallback(string text); 
+0

接近頂部的類?我的意思是,在方法和東西之前? –

+1

是的,在公共課Form1:Form' – sinelaw

+1

賓果後,得到了它的謝意。我想我投票給你。明天,工作恢復。我要睡覺,並在早上檢查另外兩個人的幫助。感謝您的幫助,並感謝其他兩位 –

3

SetTextCallback僅僅是一個與委託方法簽名相同的委託。

像:

public delegate void SetTextCallback(string message); 

您也可以從this tutorial

3

看看這個完整的例子:

// This delegate enables asynchronous calls for setting 
// the text property on a TextBox control. 
delegate void SetTextCallback(string text); 
2

我有同樣的問題,這是我的解決方案

我讀串口, datareceived和剛需要把收到的文本在文本框中,我這樣做:

public void puerto_serie_DataReceived(object sender, 
            System.IO.Ports.SerialDataReceivedEventArgs e) 
{ 
    string a = this.puerto_serie.ReadLine().Trim(); 
    leer(a); 
} 
delegate void SetTextCallback(string text); 
void leer(String b) 
{ 
    if (valores.InvokeRequired) 
    { 
    SetTextCallback d = new SetTextCallback(leer); 
    this.Invoke(d, new object[] { b }); 
    } 
    else 
    { 
    valores.Text += this.puerto_serie.ReadLine().Trim()+"\n"; 
    } 
}