2011-07-05 29 views
3

我一直想弄清楚如何讓我的文本框的文本或其他屬性從一個後臺工作。有人知道怎麼做這個嗎?我不能將它作爲參數傳遞,因爲它需要實時。謝謝您的幫助!來自後臺工作者的文本框文本?

+1

也許一些代碼。 – ata

+1

爲什麼你現在的代碼不工作?你有例外嗎?如果是的話,什麼樣的? – svick

+0

你是什麼意思的「從背後」? –

回答

5

我認爲你只是需要調用屬性(僞代碼):

private void bgw1_DoWork(object sender, DoWorkEventArgs e) 
{ 
    // looping through stuff 
    { 
    this.Invoke(new MethodInvoker(delegate { Text = textBox1.Text; })); 
    } 
} 
+0

謝謝..我沒有意識到這很簡單。 – user556396

+5

我被壓制,你沒有提到異常*跨線程操作無效:控制從其創建的線程以外的線程訪問。*在您的問題中。 – Bolu

2

使用ReportProgress方法和事件背景工人。這將切換到正確的線程爲你。

1

我想你應該使用invoke方法。

這是我的例子。

delegate void myDelegate(string name); 
//... 
private void writeToTextbox(string fCounter) 
{ 
    if (this.InvokeRequired) 
    { 
     myDelegate textWriter = new myDelegate(displayFNums); 
     this.Invoke(textWriter, new object[] { fCounter }); 
    } 
    else 
    { 
     textbox1.Text = "Processing file: " + fileCounter + "of" + 100; 
    } 
} 
//... 

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) 
{ 
    //... 
    writeToTextbox(fileCounter.ToString()); 
} 

在dowork我操縱一些文本文件,我通知用戶有多少文件我已經處理到目前爲止。

+0

用您的實際方法名稱替換「displayFNums」 「writeToTextbox」 – dataCore

2

或者如果有必要在WPF:

private void bgWorker_DoWork(object sender, DoWorkEventArgs e) 
{ 
    string text = null; 
    myTextBox.Dispatcher.Invoke(new Action(delegate() 
    { 
     text = myTextBox.Text; 
    })); 
}