private void ClearButton_Click(object sender, EventArgs e){
// 스레드 크로싱을 방지하기 위해서 대리자를 써서 UI 요소를 조작한다.
// 기존코드
MainViewListBox.Invoke(new MethodInvoker(
delegate{
MainViewListBox.Items.Clear();
}
))
}
를 이렇게 바꿀 수 있다.
private void ClearButton_Click(object sender, EventArgs e){
Action action = () => {
MainListViewBox.Items.Clear();
}
MainViewListBox.Invoke(action);
}
이렇게 바꾸면 조금 더 직관적으로 바뀐다.
물론 delegate를 선언하고 싶으면 그렇게 해도 되는데 Action과 Func이라는 편한 내장 대리자가 있기 때문에 그걸 쓰자.
위의 코드도 굳이 내장 대리자를 쓰지 않고 그대로 간다면 public void delegate 대리자이름();
이런식으로 대리자 자료형을 선언 가능하다.
하지만, Action이랑 Func이 모두 커버 가능하다.
이해가 안갈 수 있으니 좀 더 알아보면 예를 들어서
string ExFunc(int param1, int param2){}
라는 메서드가 있다고 쳐보자.
이걸 string delegate 대리자형이름(int param1, int param2); 이런식으로 선언할 수도 있지만 그냥 Func<int,int,string> 으로도 편하게 선언없이 받을수도 있다는 것이다.