我正在将一些自定义 .NET 流移植到 WINRT。语言是 C#。
是否有一些 IAsyncOperationWithProgress 的示例实现?由于方法 ReadAsync,Windows.Storage.Streams 中的 WriteAsync 需要它们。也欢迎自定义 WinRT 流实现。
我找到了一些使用 create_async 的 C 示例,但我希望在 C# 中执行此操作,但在 Metro 框架中找不到 create_async。
提前致谢
我正在将一些自定义 .NET 流移植到 WINRT。语言是 C#。
是否有一些 IAsyncOperationWithProgress 的示例实现?由于方法 ReadAsync,Windows.Storage.Streams 中的 WriteAsync 需要它们。也欢迎自定义 WinRT 流实现。
我找到了一些使用 create_async 的 C 示例,但我希望在 C# 中执行此操作,但在 Metro 框架中找不到 create_async。
提前致谢
下面是使用 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 talk on async programming。
如果您使用的是高级 C++,您应该查看这篇关于如何在 PPL 中执行异步操作的文章。
如果您需要从低级 C++ 实现自己的异步操作,您应该查看WRL::AsyncBase类。