다음을 통해 공유


AsyncOperation.Post(SendOrPostCallback, Object) 메서드

정의

애플리케이션 모델에 적절한 스레드나 컨텍스트에서 대리자를 호출합니다.

public:
 void Post(System::Threading::SendOrPostCallback ^ d, System::Object ^ arg);
public void Post (System.Threading.SendOrPostCallback d, object arg);
public void Post (System.Threading.SendOrPostCallback d, object? arg);
member this.Post : System.Threading.SendOrPostCallback * obj -> unit
Public Sub Post (d As SendOrPostCallback, arg As Object)

매개 변수

d
SendOrPostCallback

작업이 끝날 때 호출될 대리자를 래핑하는 SendOrPostCallback 개체입니다.

arg
Object

d 매개 변수에 포함된 대리자에 대한 인수입니다.

예외

PostOperationCompleted(SendOrPostCallback, Object) 메서드가 이 작업에 대해 이미 호출된 경우

d이(가) null인 경우

예제

다음 코드 예제에서는 메서드를 Post 사용하여 비동기 작업의 진행률 및 증분 결과를 보고하는 방법을 보여 줍니다. 이 코드 예제는에 대해 제공 된 큰 예제의 일부는 System.ComponentModel.AsyncOperationManager 클래스입니다.

// This method computes the list of prime numbers used by the
// IsPrime method.
private ArrayList BuildPrimeNumberList(
    int numberToTest,
    AsyncOperation asyncOp)
{
    ProgressChangedEventArgs e = null;
    ArrayList primes = new ArrayList();
    int firstDivisor;
    int n = 5;

    // Add the first prime numbers.
    primes.Add(2);
    primes.Add(3);

    // Do the work.
    while (n < numberToTest && 
           !TaskCanceled( asyncOp.UserSuppliedState ) )
    {
        if (IsPrime(primes, n, out firstDivisor))
        {
            // Report to the client that a prime was found.
            e = new CalculatePrimeProgressChangedEventArgs(
                n,
                (int)((float)n / (float)numberToTest * 100),
                asyncOp.UserSuppliedState);

            asyncOp.Post(this.onProgressReportDelegate, e);

            primes.Add(n);

            // Yield the rest of this time slice.
            Thread.Sleep(0);
        }

        // Skip even numbers.
        n += 2;
    }

    return primes;
}
' This method computes the list of prime numbers used by the
' IsPrime method.
Private Function BuildPrimeNumberList( _
    ByVal numberToTest As Integer, _
    ByVal asyncOp As AsyncOperation) As ArrayList

    Dim e As ProgressChangedEventArgs = Nothing
    Dim primes As New ArrayList
    Dim firstDivisor As Integer
    Dim n As Integer = 5

    ' Add the first prime numbers.
    primes.Add(2)
    primes.Add(3)

    ' Do the work.
    While n < numberToTest And _
        Not Me.TaskCanceled(asyncOp.UserSuppliedState)

        If IsPrime(primes, n, firstDivisor) Then
            ' Report to the client that you found a prime.
            e = New CalculatePrimeProgressChangedEventArgs( _
                n, _
                CSng(n) / CSng(numberToTest) * 100, _
                asyncOp.UserSuppliedState)

            asyncOp.Post(Me.onProgressReportDelegate, e)

            primes.Add(n)

            ' Yield the rest of this time slice.
            Thread.Sleep(0)
        End If

        ' Skip even numbers.
        n += 2

    End While

    Return primes

End Function

설명

메서드는 Post 비동기 작업의 수명을 종료하지 않고 매개 변수로 지정된 arg 대리자를 호출합니다.

비동기 작업의 수명이 에 대한 호출로 종료되지 않은 동안 메서드를 원하는 만큼 자주 호출 PostPostOperationCompleted수 있습니다. 메서드를 사용하여 진행률 또는 중간 결과를 클라이언트에 다시 보고할 수 있습니다.

매개 변수는 d 비동기 작업의 상태 대한 업데이트를 게시하려는 경우 호출하려는 대리자를 래핑합니다. AsyncOperation 개체는 스레드 또는 컨텍스트에서 애플리케이션 모델에 대 한 적절 한 대리자가 호출 됨을 확인 합니다. 메서드는 필요에 따라 상태 변경, 진행률 업데이트 또는 새로 사용 가능한 증분 결과를 클라이언트에 알립니다.

매개 변수를 arg 사용하여 매개 변수로 래핑된 d 대리자의 상태를 전달해야 합니다. 에 대한 참조 AsyncOperation이거나 개체일 System.ComponentModel.ProgressChangedEventArgs 수 있습니다. 추가 상태 스토리지를 제공하기 위해 System.ComponentModel.ProgressChangedEventArgs에서 고유한 클래스를 가져오는 것이 바람직할 수 있습니다.

상속자 참고

상속자는 Post(SendOrPostCallback, Object) 클래스 라이브러리 공급자 잠재적인 스택과 기울이지 않아도 되도록 비동기 호출 오버플로 비동기 가정 했지만 특정 애플리케이션 모델을 동기로 발생 합니다.

참고: 콘솔 애플리케이션은 호출 실행을 Post(SendOrPostCallback, Object) 동기화하지 않습니다. 이로 인해 ProgressChanged 이벤트가 잘못 발생할 수 있습니다. Post(SendOrPostCallback, Object) 호출이 serialize되어 실행되도록 하려면 SynchronizationContext 클래스를 구현하여 설치합니다.

비동기 클래스 구현에 대한 자세한 내용은 이벤트 기반 비동기 패턴 구현을 참조하세요.

적용 대상

추가 정보