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