0

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

1 回答 1

3

你可以使用这个:

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

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

于 2012-02-07T21:37:26.933 回答