我的问题如下:
我有一个Windows窗体,在其中放置了一个LayoutPanel,当窗体加载时,会向LayoutPanel添加多个控件,例如:文本框和标签。
然后在单击按钮时,我需要处理用户在那些动态创建的控件上输入的数据。为此,我使用Backgroundworker来获取这些控件并读取它们的数据。
我的问题是Backgroundworker不允许我从DoWork方法中访问控件,但我必须这样做,因为我将报告操作的进度。
以下是我的部分代码以澄清概念:
我有一个Windows窗体,在其中放置了一个LayoutPanel,当窗体加载时,会向LayoutPanel添加多个控件,例如:文本框和标签。
然后在单击按钮时,我需要处理用户在那些动态创建的控件上输入的数据。为此,我使用Backgroundworker来获取这些控件并读取它们的数据。
我的问题是Backgroundworker不允许我从DoWork方法中访问控件,但我必须这样做,因为我将报告操作的进度。
以下是我的部分代码以澄清概念:
private void frmMyForm_Load(object sender, EventArgs e)
{
//I add multiple controls, this one is just for example
LayoutPanel1.add(TextBox1);
....
}
private void bgwBackground_DoWork(object sender, DoWorkEventArgs e)
{
foreach (Control controlOut in LayoutPanel1.Controls)
{
//do some stuff, this one is just for example
string myString = controlOut.Name; //-> Here is the error, cant access controls from different Thread.
}
}
设置文本很简单,只需使用委托,但如何获取整个父控件以操作子控件(仅用于获取信息,不想设置任何数据,只需要获取名称、文本等)。
希望我表述清楚了,谢谢大家。