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