使用c# Windows。窗体,是否方法Invalidate(), Refresh()等必须在主/GUI线程上运行(要求调用/BeginInvoke)?如何更改GUI对象的成员,例如添加/删除点或更改图表中序列的颜色。图表对象?
我有一些这些变化发生在一个工作线程没有任何问题(所以我猜他们是ok的?),但我试图区分哪些变化是显式需要在GUI线程和哪些变化可以发生在一个工作线程的对象。有人有关于这个主题的指导的链接或参考书籍吗?
一般来说,您应该假设所有GUI元素的更改都应该在UI线程上进行。
通常,对后台线程的更改将在测试期间工作,但在部署后中断。一般来说,除非另有说明,否则假设一切都应该在UI线程上要安全得多。
你不能在工作线程上操作WinForms控件的同步方法调用。
我不确定"添加/删除点"指的是什么,或者图表。图表类。这个类可以自己封装GUI线程调用。
一般来说,如果你要修改控件的大小、文本、背景颜色或其他属性,这必须使用Invoke/BeginInvoke.
这会告诉Control。InvokeRequired