Как мне вызвать ImageList.Images.Clear () из другого потока? - PullRequest
0 голосов
/ 08 февраля 2012

Как мне вызвать 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 Ответ

3 голосов
/ 08 февраля 2012

Вы можете использовать это:

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

Это будет асинхронно вызывать делегата в потоке пользовательского интерфейса. Если вам нужно немедленно очистить список, замените Post на Send. Конечно, вам также нужна ссылка на список изображений, который вы хотите очистить.

...