如何從另一個線程調用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中沒有一個InvokeRequired或調用,再加上我不想設置屬性,我只是想打電話
ImageList.Images.Clear()
你需要跟蹤你的線程上下文。現在看起來可能很痛苦,但是爲了讓這個方案正確無誤,你可以節省自己的時間。 – 2012-02-07 21:26:28
你的代碼有一個問題 - 如果控件/它的父類的'Handle'沒有被創建,那麼'InvokeRequired'將返回'false'。在第一次使用代碼之前,您必須確保已在UI線程上創建了「Handle」,否則您的應用程序將遇到奇怪的麻煩! – Yahia 2012-02-07 21:28:41