2011-07-05 11 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メソッドを使うべきだと思います。

ここは私の例です。 doworkで

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()); 
} 

私はいくつかのテキストファイルを操作し、私は私がこれまでに処理されているどのように多くのファイルをユーザーに知らせます。

+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; 
    })); 
} 
関連する問題