如何实现IAsyncOperationWithProgress

本文关键字:IAsyncOperationWithProgress 实现 何实现 | 更新日期: 2023-09-27 18:30:59

我正在将一些自定义的.NET流移植到WINRT。语言是 C#。

是否有一些IAsyncOperationWithProgress的示例实现?由于方法ReadAsync,Windows.Storage.Streams的WriteAsync需要它们。也欢迎自定义 WinRT 流实现。

我找到了一些使用 create_async 的 C 示例,但我希望在 C# 中执行此操作,并且在 Metro 框架中找不到create_async。

提前致谢

如何实现IAsyncOperationWithProgress

下面是

使用 IAsyncOperationWithProgress 以编程方式显示安装 XAP 文件的进度的示例。 我对 Win8 开发很陌生,所以不确定它是否完全是惯用语。

请注意 Dispatcher.BeginInvoke 以将进度编送回 UI 线程。 希望它有帮助:

private async void InstallApp(string name, Uri uri)
{
    try
    {
        StatusTextBlock.Text = "Installing app";
        var installTask = InstallationManager.AddPackageAsync(name, uri);
        installTask.Progress = (installResult, progress) => Dispatcher.BeginInvoke(() =>
        {
            StatusTextBlock.Text = "Progress: " + progress;
        });
        var result = await installTask;
        StatusTextBlock.Text = "Done: " + result.InstallState.ToString();
    }
    catch (Exception ex)
    {
        StatusTextBlock.Text = "Failed to install: " + ex.Message;
    }
}

对于 C#,你应该看看这个关于异步编程的//build 谈话。

如果您使用的是高级C++,则应查看有关如何在 PPL 中执行异步操作的文章。

如果需要从低级别C++实现自己的异步操作,则应查看 WRL::AsyncBase 类。