[펌] 다중처리를 위하여 사용하는 비동기 구현
public delegate int MyDelegate(int i, int j); <- 아래 Add 메소드와 형정보가 같아야 한다.
private void button1_Click(object sender, System.EventArgs e) {
int i, j;
i = Convert.ToInt32(textBox1.Text);
j = Convert.ToInt32(textBox2.Text);
AsyncCallback ac = new AsyncCallback(CallEnd); <-비동기 콜백 함수 선언
MyDelegate md = new MyDelegate(Add) <- 델리게이트 생성
IAsyncResult ir = md.BeginInvoke(i, j, ac, md);
MessageBox.Show("비동기 호출");
/* 직접 호출
int temp = md(i, j);
MessageBox.Show(temp.ToString());
*/
}
public int Add(int i, int j) {
System.Threading.Thread.Slepp(5000); <- 5초가 소요되는 코드...
return i+j;
}
public void CallEnd(IAsyncResult ar) {
//비동기 결과 출력.
MyDelegate md = (MyDelegate) ar.AsyncState;
int temp = md.EndInvoke(ar);
MessageBox.Show("결과 = "+ temp.ToString());
}
※비동기를 만들기 위해서
1. 비동기 콜백(CallBack) 함수를 만든다.
AsyncCallback ac = new AsyncCallback(CallEnd);
2. AsyncCallback도 델리게이트이므로 CallEnd를 선언한다.
public void CallEnd(IAsyncResult ar) { }
3. 호출한다.
iAsyncResult ir = md.BeginInvoke(i, j, ac, md);
"비동기 호출" 메시지 박스 출력 후 5초뒤에 "결과"가 출력된다.