형식화 된 대리자가 아닌 Invoke
/ BeginInvoke
수락 하기 때문에 Delegate
컴파일러에게 만들 대리자 형식을 알려야합니다. MethodInvoker
(2.0) 또는 Action
(3.5)는 일반적인 선택입니다 (서명은 동일 함). 이렇게 :
control.Invoke((MethodInvoker) delegate {this.Text = "Hi";});
매개 변수를 전달해야하는 경우 "캡처 된 변수"는 다음과 같습니다.
string message = "Hi";
control.Invoke((MethodInvoker) delegate {this.Text = message;});
(캐비티 : 캡처를 비동기로 사용하는 경우 약간 조심해야 하지만 동기화 는 양호합니다. 즉 위의 내용은 괜찮습니다)
또 다른 옵션은 확장 메소드를 작성하는 것입니다.
public static void Invoke(this Control control, Action action)
{
control.Invoke((Delegate)action);
}
그때:
this.Invoke(delegate { this.Text = "hi"; });
// or since we are using C# 3.0
this.Invoke(() => { this.Text = "hi"; });
물론 다음과 같이 할 수 있습니다 BeginInvoke
.
public static void BeginInvoke(this Control control, Action action)
{
control.BeginInvoke((Delegate)action);
}
C # 3.0을 사용할 수 없으면 Form
기본 클래스 에서 일반 인스턴스 메소드로 동일하게 수행 할 수 있습니다.