这是一个在C#中完成的Windows应用程序的交叉线程操作,我该如何改变它?如何从另一个表单更改标签的文本?
回答
你需要使用一个委托,并调用......
private delegate void SetLabelSub(string NewText);
private void SetLabel(string NewText)
{
if (this.InvokeRequired()) {
SetLabelSub Del = new SetLabelSub(SetLabel);
this.Invoke(Del, new object[] { NewText });
} else {
SomeLabel.Text = NewText;
}
}
然后,你可以调用SetLabel("New Text Here")
从任何线程
如果你正在处理线程,你需要使用form.Invoke ()方法,假设你将表单实例传递给另一个表单。 大致 窗体form1 =新窗体() Form2 = new Form(); form2.CallingForm = form1; <使这个属性或什么都
内窗口2添加像
form1.Invoke(someDelagate,value)的一些代码;
我不会做winforms,但如果你经常使用google form.voke,你会得到一些关于如何做跨线程操作的很好的例子。
那么亚去,下一篇文章告诉你如何编写invoke方法。 – cdmdotnet 2010-08-24 02:15:55
你可以写,你可以从任何线程调用一个方法:
private void SetLabel(string newText)
{
Invoke(new Action(() => SomeLabel.Text = NewText));
}
然后,你可以调用SetLabel("Update the label, please")
从任何线程。
然而,你的问题标题状态“从另一个表”,而不是“从另一个线程”,所以目前还不清楚是什么你实际上意味着。如果您只想拥有多个表单,则不需要多线程。您应该只将线程用于任务,例如下载文件,复制文件,计算值等,但不适用于表单。
如何写一个更通用的方法来改变任何控制Text属性在您的形式,如:
private void SetText(Control control, string text)
{
if (control.InvokeRequired)
this.Invoke(new Action<Control>((c) => c.Text = text),control);
else
control.Text = newText;
}
这将为标签,按钮等工作,无论从UI线程或任何其他线程。
- 1. 从另一个表格更改标签文本
- 2. 如何从另一个php页面更改一个页面的标签文本?
- 3. 如何从另一个UIView更改一个UIView上的标签
- 4. 如何从另一个类更改标签和表视图?
- 5. C# - 从另一个类中更改标签文本
- 6. Java从另一个框架更改标签文本
- 7. 如何更改生成的标签的文本从另一个功能
- 8. 如何通知从一个标签更改为另一个Android
- 9. 如何从另一个窗体visual basic的标签更改文本?
- 10. 从另一页更改主页面中的标签文本
- 11. 如何通过点击另一个标签来更改一个标签的类和文本?
- 12. 如何更改NativeScript标签的文本
- 13. 如何更改div标签的文本
- 14. 如何用另一个类的方法更改标签号和文本?
- 15. 如何使文本从一个屏幕更改为另一个
- 16. 从另一种形式更改标签
- 17. C#问题设置另一个表单上的标签文本
- 18. 从另一个类更改JLabel文本
- 19. 从另一个活动更改文本
- 20. jQuery的 - 从标签更改文本
- 21. 从片段更改标签的文本
- 22. 从PopOver更改标签的文本
- 23. 如何从文本框中更改标签文本
- 24. 从一个标签更改为另一个
- 25. UNIX,如何从另一个文件更改脚本文件?
- 26. 如何更改标签文本动态
- 27. Bitrix24 CRM菜单标签文本更改
- 28. 如何从一个标签切换到另一个标签?
- 29. 如何从另一个类更新一个xib标签
- 30. 在C#中以另一种形式更改标签的文本?
如何回旋。只需编写'Invoke(new Action(()=> SomeLabel.Text = NewText));'。在不是绝对必要时执行调用的性能影响可以忽略不计,在99%的情况下,程序员已经知道它始终会从另一个线程调用。 – Timwi 2010-08-24 02:18:50
一个非常有效的点 - 但我要明确:) – Basic 2010-08-24 02:22:38