我有许多后台线程(在本例中为 5 个),它们生成如下代码:
Progress prog = new Progress();
foreach (var questionLang in QuestionsLangConstants.questionLangs.Values)
{
ThreadPool.QueueUserWorkItem(
delegate
{
qrepo.UploadQuestions(QWorkBook.Worksheets[questionLang.QSheet], questionLang, prog);
});
}
prog.Show();
Progress
是一个包含以下代码的表单。
private delegate Label AddNewLabel();
private delegate void ChangeLabelText(Label lbl, string text);
public Label addNewLabel()
{
if (this.InvokeRequired)
{
AddNewLabel adl = new AddNewLabel(addNewLabel);
this.Invoke(adl);
return new Label();
}
else
{
Label lbl = new Label();
this.Controls.Add(lbl);
return lbl;
}
}
public void changeLabelText(Label lbl, string text)
{
if (this.InvokeRequired)
{
ChangeLabelText clt = new ChangeLabelText(changeLabelText);
this.Invoke(clt, new object[] { lbl, text });
}
else
{
lbl.Text = text;
}
}
并UploadQuestions
函数读取excel文件并使用
Label lbl = prog.addNewLabel();
while (questionNum != "")
{
//code here
prog.changeLabelText(lbl, questionNum);
//code to increment questionNum
}
我希望使用 excel 中的行数创建和更新 5 个标签,但没有任何反应。标签未更新但已创建。(甚至在另一个上)。