我如何从另一个线程调用ImageList.Images.Clear()?

时间:2012-02-07 21:23:45

标签: c# multithreading invoke imagelist

如何从另一个线程调用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()

1 个答案:

答案 0 :(得分:3)

您可以使用:

System.Threading.SynchronizationContext.Current.Post(o => ImageList.Images.Clear(), null);

这将在UI线程上异步调用委托。如果您需要立即清除列表,请将Post替换为Send。当然,您还需要对要清除的ImageList的引用。