AsyncOperation.Post(SendOrPostCallback, Object) 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
애플리케이션 모델에 적절한 스레드나 컨텍스트에서 대리자를 호출합니다.
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)
매개 변수
작업이 끝날 때 호출될 대리자를 래핑하는 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
대리자를 호출합니다.
비동기 작업의 수명이 에 대한 호출로 종료되지 않은 동안 메서드를 원하는 만큼 자주 호출 Post 할 PostOperationCompleted수 있습니다. 메서드를 사용하여 진행률 또는 중간 결과를 클라이언트에 다시 보고할 수 있습니다.
매개 변수는 d
비동기 작업의 상태 대한 업데이트를 게시하려는 경우 호출하려는 대리자를 래핑합니다. AsyncOperation 개체는 스레드 또는 컨텍스트에서 애플리케이션 모델에 대 한 적절 한 대리자가 호출 됨을 확인 합니다. 메서드는 필요에 따라 상태 변경, 진행률 업데이트 또는 새로 사용 가능한 증분 결과를 클라이언트에 알립니다.
매개 변수를 arg
사용하여 매개 변수로 래핑된 d
대리자의 상태를 전달해야 합니다. 에 대한 참조 AsyncOperation이거나 개체일 System.ComponentModel.ProgressChangedEventArgs 수 있습니다. 추가 상태 스토리지를 제공하기 위해 System.ComponentModel.ProgressChangedEventArgs에서 고유한 클래스를 가져오는 것이 바람직할 수 있습니다.
상속자 참고
상속자는 Post(SendOrPostCallback, Object) 클래스 라이브러리 공급자 잠재적인 스택과 기울이지 않아도 되도록 비동기 호출 오버플로 비동기 가정 했지만 특정 애플리케이션 모델을 동기로 발생 합니다.
참고: 콘솔 애플리케이션은 호출 실행을 Post(SendOrPostCallback, Object) 동기화하지 않습니다. 이로 인해 ProgressChanged
이벤트가 잘못 발생할 수 있습니다. Post(SendOrPostCallback, Object) 호출이 serialize되어 실행되도록 하려면 SynchronizationContext 클래스를 구현하여 설치합니다.
비동기 클래스 구현에 대한 자세한 내용은 이벤트 기반 비동기 패턴 구현을 참조하세요.
적용 대상
추가 정보
.NET