대리인의 비동기 호출
때때로 대리인이 복잡한 작업과 시간을 완료하도록 원하는 경우 -소비 작업 작업을 수행할 때 동기식 호출은 사용자가 지루한 시간 소모와 긴 (상대적으로 말하면) 기다리고 있어요. 이때 델리게이트의 비동기 호출은 C#도 beginInvoke를 통해 캡슐화된다는 장점이 있습니다. endInvke를 완료합니다. 아래에 예가 나와 있습니다.
1. 은 대리자를 정의합니다. myDelegate
2. 외부 구독에 대한 이벤트가 정의되었습니다. 3.
증분, 테스트 필드4.
doIt 방법, 매번 increment라고 하며 값이 5 일 때 비동기 호출 이벤트 가 저절로 증가합니다.
핵심은 다음 코드입니다. IAsyncResult result = this.callBack.BeginInvoke
(new AsyncCallback(
(ia) => {
MessageBox.Show("completed");
AsyncResult ar = (AsyncResult)ia;
MyDelegate md = ar.AsyncDelegate as MyDelegate;
int r = md.EndInvoke(ia);
MessageBox.Show(r.ToString() + ia.AsyncState);
}), "message");
MessageBox.Show("begin invoke");
이 함수에는 4개의 매개변수가 포함됩니다:
AsyncCallback Object: 이 매개변수는 콜백이 완료되었을 때 다음에 수행할 작업을 알려주는 것을 의미하므로 이 매개변수에 메서드를 전달해야 합니다.
new AsyncCallback(여기에서 메소드를 받습니다. 여기서는 lambdaexpression) 을 사용했습니다. . ObjectObject: 콜백 종료 시 호출되는 메소드에 전달할 매개변수입니다.
AsyncResult ar = (AsyncResult)ia;//// 들어오는 IasyncResult를 가져와 AsyncResult 객체 MyDelegate md = ar.AsyncDelegate as MyDelegate;////get callBack객체 int r = md.EndInvoke(ia);////대리자 호출을 종료하고 반환 값을 가져옵니다 MessageBox.Show(r.ToString() + ia.AsyncState);////반환 값을 얻었는지 확인 OK 이제 비동기 대리자가 정의되었으므로 다음 단계는 다음을 호출하는 것입니다. 코드 설명: 신규 timer 및 asyntroniseDelegate 객체. callBack 이벤트를 구독하세요. 마지막으로 이 메서드는 1 . 타이머를 사용하여 증분 작업을 완료하세요. . 매초 1씩 누적됩니다. 증분이 누적되어 5이 되면 콜백 이벤트가 발생하면 10회 반복되는 매우 복잡한 작업을 수행하라는 요청을 받습니다. 실행하면 프롬프트 상자가 표시됩니다. , 이어서 , 이후 약 2~3초 정도 프롬프트 상자가 나타난 후 및 (가시적, 비동기 호출 마침내 우리는 성공적으로 메소드의 반환 값을 얻었습니다)
위는 C# 대리자의 비동기 호출입니다. 코드 예제에 대한 자세한 내용은 PHP 중국어 웹사이트(www.php.cn)를 참조하세요!