>  기사  >  백엔드 개발  >  C# 대리자의 비동기 호출에 대한 그래픽 코드 예

C# 대리자의 비동기 호출에 대한 그래픽 코드 예

黄舟
黄舟원래의
2017-03-04 10:17:411593검색

대리인의 비동기 호출

때때로 대리인이 복잡한 작업과 시간을 완료하도록 원하는 경우 -소비 작업 작업을 수행할 때 동기식 호출은 사용자가 지루한 시간 소모와 긴 (상대적으로 말하면) 기다리고 있어요. 이때 델리게이트의 비동기 호출은 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");

BeginInvoke


이 함수에는 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 이제 비동기 대리자가 정의되었으므로 다음 단계는 다음을 호출하는 것입니다.

코드 설명:

신규 timerasyntroniseDelegate 객체.

callBack 이벤트를 구독하세요. 마지막으로 이 메서드는 1 .

타이머를 사용하여 증분 작업을 완료하세요. . 매초 1씩 누적됩니다.

증분이 누적되어 5이 되면 콜백 이벤트가 발생하면 10회 반복되는 매우 복잡한 작업을 수행하라는 요청을 받습니다.

실행하면 프롬프트 상자가 표시됩니다. , 이어서 , 이후 약 2~3초 정도 프롬프트 상자가 나타난 후 (가시적, 비동기 호출 마침내 우리는 성공적으로 메소드의 반환 값을 얻었습니다)

위는 C# 대리자의 비동기 호출입니다. 코드 예제에 대한 자세한 내용은 PHP 중국어 웹사이트(www.php.cn)를 참조하세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.