다른 스레드에서 ImageList.Images.Clear()를 호출하려면 어떻게해야합니까? 나는다른 스레드에서 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은, 그냥
ImageList.Images.Clear()
스레드 컨텍스트를 추적해야합니다. 그것은 지금 고통처럼 보일지도 모르지만, 당신은이 권리를 얻기 위해 미래에 시간을 절약 할 것입니다. –
당신의 코드는 한가지 문제가 있습니다 - 컨트롤/부모의'Handle '이 생성되지 않았다면'InvokeRequired'는'false'를 리턴 할 것입니다. 코드를 처음 사용하기 전에 UI 스레드에서'Handle'이 생성되었는지 확인해야합니다. 그렇지 않으면 응용 프로그램이 이상한 문제를 일으킬 것입니다! – Yahia