我一直在试图弄清楚如何从后台工作者中获取文本框的文本或其他属性。有人知道怎么做这个吗?我无法将其作为一个参数传递,因为它需要是实时的。谢谢你的帮助!
答案 0 :(得分:6)
我认为你只需要调用属性(伪代码):
private void bgw1_DoWork(object sender, DoWorkEventArgs e)
{
// looping through stuff
{
this.Invoke(new MethodInvoker(delegate { Text = textBox1.Text; }));
}
}
答案 1 :(得分:2)
使用后台工作程序的ReportProgress方法和事件。那会为你切换到正确的主题。
答案 2 :(得分:2)
或者如果需要WPF:
private void bgWorker_DoWork(object sender, DoWorkEventArgs e)
{
string text = null;
myTextBox.Dispatcher.Invoke(new Action(delegate()
{
text = myTextBox.Text;
}));
}
答案 3 :(得分: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我操作了一些文本文件,并告诉用户我目前处理了多少文件。