복잡한 풀 delegate 보다는 내장대리자를..!

냐옹·2024년 4월 9일
0

.NET

목록 보기
21/31
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를 선언하고 싶으면 그렇게 해도 되는데 ActionFunc이라는 편한 내장 대리자가 있기 때문에 그걸 쓰자.

위의 코드도 굳이 내장 대리자를 쓰지 않고 그대로 간다면 public void delegate 대리자이름();
이런식으로 대리자 자료형을 선언 가능하다.

하지만, Action이랑 Func이 모두 커버 가능하다.

이해가 안갈 수 있으니 좀 더 알아보면 예를 들어서

string ExFunc(int param1, int param2){}

라는 메서드가 있다고 쳐보자.

이걸 string delegate 대리자형이름(int param1, int param2); 이런식으로 선언할 수도 있지만 그냥 Func<int,int,string> 으로도 편하게 선언없이 받을수도 있다는 것이다.

0개의 댓글