我确信这有一个很好的(或至少体面的)理由。它是什么?
最佳答案
I think this is a brilliant question - and I think there is need of a better answer.
Surely the only reason is that there is something in a framework somewhere that isn't very thread-safe.
这个“东西”几乎是 System.Windows.Forms 中每个控件上的每个实例成员。
System.Windows.Forms 中许多控件的 MSDN 文档(如果不是全部)说“这种类型的任何公共(public)静态(在 Visual Basic 中共享)成员都是线程安全的。不保证任何实例成员都是线程安全的。”
这意味着实例成员如
TextBox.Text {get; set;}
不是 可重入 .使这些实例成员中的每一个都成为线程安全的可能会引入大多数应用程序不需要的大量开销。相反,.Net 框架的设计者决定,而且我认为是正确的,应该把从多个线程同步访问表单控件的负担放在程序员身上。
[编辑]
虽然这个问题只问“为什么”,但这里有一个解释“如何”的文章的链接:
如何:对 MSDN 上的 Windows 窗体控件进行线程安全调用
http://msdn.microsoft.com/en-us/library/ms171728.aspx
关于winforms - 在 WinForms 中,为什么不能从其他线程更新 UI 控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10349/