C# 在C中更新列表框颜色#

C# 在C中更新列表框颜色#,c#,.net,listbox,C#,.net,Listbox,出于我的目的,我正在4.0中编写一个GUI,它使用自定义颜色在列表框中显示我的自定义实例对象。我已经能够画出它们各自的颜色,但我想知道是否有办法改变这些颜色 我曾尝试过每隔几秒钟清除列表框并在一个单独的BackGroundWorker中读取实例对象,但是,这种方法导致了许多令人头痛的问题,因为列表框.selectedIndex将发生更改,并将事件发送到我的列表框\u SelectedIndexChanged事件处理程序。因此,如果可能的话,我希望避免这种情况,因为试图用线程、锁定、条件、打开和关

出于我的目的,我正在4.0中编写一个GUI,它使用自定义颜色在
列表框中显示我的自定义
实例
对象。我已经能够画出它们各自的颜色,但我想知道是否有办法改变这些颜色

我曾尝试过每隔几秒钟清除
列表框
并在一个单独的
BackGroundWorker
中读取
实例
对象,但是,这种方法导致了许多令人头痛的问题,因为
列表框.selectedIndex
将发生更改,并将事件发送到我的
列表框\u SelectedIndexChanged
事件处理程序。因此,如果可能的话,我希望避免这种情况,因为试图用线程、锁定、条件、打开和关闭事件处理程序、InvalidArgumentException来编写代码是一场噩梦

我想知道,后台工作人员是否有任何方法可以直观地更新我的
列表框中的颜色,而无需添加和重新添加项目来触发所述的
DrawItem
事件

编辑:
调用ListBox.Refresh()重新绘制ListBox中的所有项目,这样做可以避免selectedIndexChanged事件处理程序并更新所有项目的颜色

如果您有后台工作人员报告进度,那么您可以使用进度更改方法,访问列表框中的项目并重新绘制所需的项目,取决于您报告的进度百分比。应该相当简单,除非您有很多项和很多颜色。

更改颜色并调用
ListBox.Update()
,或者如果来自不同的线程,
ListBox.Invoke(new MethodInvoker(()=>ListBox.Update())
谢谢!工作得很有魅力