如何从另一个线程调用ImageList.Images.Clear()?我试着做一个像
这样的功能 private delegate void SetControlPropertyThreadSafeDelegate(Control control, string propertyName, object propertyValue);
public static void SetControlPropertyThreadSafe(Control control, string propertyName, object propertyValue)
{
if (control.InvokeRequired)
{
control.Invoke(new SetControlPropertyThreadSafeDelegate(SetControlPropertyThreadSafe), new object[] { control, propertyName, propertyValue });
}
else
{
control.GetType().InvokeMember(propertyName, System.Reflection.BindingFlags.SetProperty, null, control, new object[] { propertyValue });
}
}
但是ImageList没有InvokeRequired或Invoke,而且我不想设置属性,我只想打电话
ImageList.Images.Clear()
答案 0 :(得分:3)
您可以使用:
System.Threading.SynchronizationContext.Current.Post(o => ImageList.Images.Clear(), null);
这将在UI线程上异步调用委托。如果您需要立即清除列表,请将Post替换为Send。当然,您还需要对要清除的ImageList的引用。