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>
으로도 편하게 선언없이 받을수도 있다는 것이다.