IAsyncOperationWithProgress介面定義及其Progress屬性定義原型如下:
generic<typename TResult, typename TProgress>public interface class IAsyncOperationWithProgress : IAsyncInfo
property AsyncOperationProgressHandler<TResult, TProgress>^ Progress { AsyncOperationProgressHandler<TResult, TProgress>^ get(); void set (AsyncOperationProgressHandler<TResult, TProgress>^ value);}
public delegate void AsyncOperationProgressHandler( IAsyncOperationWithProgress<TResult, TProgress> asyncInfo, TProgress progressInfo)
例子如下:
void Test(){ Windows::Foundation::IAsyncOperationWithProgress<double, int>^ async = create_async([](progress_reporter<int> report){ double n = 12.34; for (int i = 0; i < 10; ++i) { concurrency::wait(1000); n += 1.0; report.report((i + 1) * 10); } return n; }); async->Progress = ref new AsyncOperationProgressHandler<double, int>([](IAsyncOperationWithProgress<double, int>^ op, int pro){ OutputDebugString(L"progress:"); OutputDebugString(pro.ToString()->Data()); OutputDebugString(L"%...\n"); }); create_task(async).then([](double n){ OutputDebugString(L"result = "); OutputDebugString(n.ToString()->Data()); OutputDebugString(L"\n"); });}
輸出結果如下:
progress:10%...
progress:20%...
progress:30%...
progress:40%...
progress:50%...
The thread 0xed4 has exited with code 0 (0x0).
progress:60%...
progress:70%...
progress:80%...
progress:90%...
progress:100%...
result = 22.34