티스토리 뷰
반응형
기존
void Custom(int a){
if (InvokeRequired)
{
Invoke(new MethodInvoker(() => Custom(a)));
}
else
{
...
}
}
이런식의 Invoke 처리 코드는 질리도록 봤을 것이다.
문제는 위의 코드 반복이 심하다는 것. 메서드를 만들지 않으면 처리 코드까지 반복이 된다.
간단히 사용해보자.
대체
public delegate void InvokeIfRequiredDelegate<T>(T obj) where T : ISynchronizeInvoke;
public static void InvokeIfRequired<T>(this T obj, InvokeIfRequiredDelegate<T> action) where T : ISynchronizeInvoke
{
if (obj.InvokeRequired)
{
obj.Invoke(action, new object[] { obj });
}
else
{
action(obj);
}
}
public static TOut InvokeIfRequired<TIn, TOut>(this TIn obj, Func<TIn, TOut> func)
where TIn : ISynchronizeInvoke
{
return obj.InvokeRequired
? (TOut)obj.Invoke(func, new object[] { obj })
: func(obj);
}
위 메서드를 정적 클래스에 등록해서 확장 메서드로 등록한다.
다음과 같이 사용할 수 있다.
InvokeIfRequired(o=>{
o.Text = "ABC";
}); // this.InvokeIfRequired 와 같음
button.InvokeIfRequired(o => {
o.Text = "ABC";
});
String t = label.InvokeIfRequired(o => {
o.Text = "ABC";
return o.Text;
});
반응형
'PC&웹 > VS프로그래밍' 카테고리의 다른 글
C# 클래스 기본 접근 형식 (0) | 2021.06.26 |
---|---|
C# 파일을 찾을 수 없으므로 복사 할 수 없습니다. (0) | 2021.06.16 |
C# InvokeRequired 확장 람다 메서드 (0) | 2021.06.16 |
C# Async, Thread에서 UI 처리시 Freezing 현상 (0) | 2021.06.16 |
.Net Framework에서 C# 9.0 이상의 문법을 사용하기 (0) | 2021.06.13 |
C#, 키움 OpenAPI GetCommDataEx 처리 속도 (0) | 2021.06.12 |
댓글