2006년 07월 13일
멀티쓰레드에서 컨트롤의 속성 바꾸기
그래서 다른 쓰레드에서 접근하려면 Invoke 함수를 통해 접근해야한다.
현재 쓰레드에 컨트롤 핸들이 속했는지를 알기 위해서는 Control 클래스의 InvokeRequired 속성을 참조하면 된다.
이 속성이 true일 경우에만 Invoke함수를 쓸 필요가 있는 것이다.
public object Invoke(Delegate method);
public object Invoke(Delegate method, params object[] args);
다음은 내가 짜서 쓰고 있는 클래스..
static class ControlProperty
{
delegate void PropertySetter(object control, string propertyName, object value);
private static void Setter(object control, string propertyName, object value)
{
try
{
Type type = control.GetType();
PropertyInfo prop = type.GetProperty(propertyName);
prop.SetValue(control, value, null);
}
catch
{
}
}
public static void Set(object control, string propertyName, object value)
{
if (control is Control)
{
Control ctrl = control as Control;
if (ctrl.InvokeRequired)
ctrl.Invoke(new PropertySetter(Setter), control, propertyName, value);
else
Setter(control, propertyName, value);
}
}
}
사용예
ControlProperty.Set(nicknameTextBox, "Enabled", false);
ControlProperty.Set(nicknameTextBox, "Text", string.Empty);
# by | 2006/07/13 01:15 | .NET | 트랙백 | 덧글(0)



☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]