Windows 8 Store Apps学习(45) 多线程之异步编程: IAsyncAction

多线程之异步编程: IAsyncAction, IAsyncOperation

重新想象 Windows 8 Store Apps (45) - 多线程之异步编程: IAsyncAction, IAsyncOperation, IAsyncActionWithProgress, IAsyncOperationWithProgress

介绍

重新想象 Windows 8 Store Apps 之 异步编程

IAsyncAction - 无返回值,无进度值

IAsyncOperation - 有返回值,无进度值

IAsyncActionWithProgress - 无返回值,有进度值

IAsyncOperationWithProgress - 有返回 值,有进度值

示例

1、演示 IAsyncAction(无返回值,无进度值)的用法

Thread/Async/IAsyncActionDemo.xaml

<Page
    x:Class="XamlDemo.Thread.Async.IAsyncActionDemo"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:XamlDemo.Thread.Async"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid Background="Transparent">
        <StackPanel Margin="120 0 0 0">

            <TextBlock Name="lblMsg" FontSize="14.667" />

            <Button Name="btnCreateAsyncAction" Content="执行一个 IAsyncAction" Click="btnCreateAsyncAction_Click_1" Margin="0 10 0 0" />

            <Button Name="btnCancelAsyncAction" Content="取消" Click="btnCancelAsyncAction_Click_1" Margin="0 10 0 0" />

        </StackPanel>
    </Grid>
</Page>

Thread/Async/IAsyncActionDemo.xaml.cs

/*
 * 演示 IAsyncAction(无返回值,无进度值)的用法
 *
 * 注:
 * 1、WinRT 中的异步功能均源自 IAsyncInfo
 * 2、IAsyncAction, IAsyncOperation<TResult>, IAsyncActionWithProgress<TProgress>, IAsyncOperationWithProgress<TResult, TProgress> 均继承自 IAsyncInfo
 *
 *
 * 另:
 * Windows.System.Threading.ThreadPool.RunAsync() - 返回的就是 IAsyncAction
 */

using System.Runtime.InteropServices.WindowsRuntime;
using System.Threading.Tasks;
using Windows.Foundation;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;

namespace XamlDemo.Thread.Async
{
    public sealed partial class IAsyncActionDemo : Page
    {
        private IAsyncAction _action;

        public IAsyncActionDemo()
        {
            this.InitializeComponent();
        }

        private IAsyncAction GetAsyncAction()
        {
            // 通过 System.Runtime.InteropServices.WindowsRuntime.AsyncInfo 创建 IAsyncAction
            return AsyncInfo.Run(
                (token) => // CancellationToken token
                    Task.Run(
                        () =>
                        {
                            token.WaitHandle.WaitOne(3000);
                            token.ThrowIfCancellationRequested();
                        },
                        token));
        }

        private void btnCreateAsyncAction_Click_1(object sender, RoutedEventArgs e)
        {
            _action = GetAsyncAction();

            // 可以 await _action 

            // IAsyncAction 完成后
            _action.Completed =
                (asyncInfo, asyncStatus) => // IAsyncAction asyncInfo, AsyncStatus asyncStatus
                {
                    // AsyncStatus 包括:Started, Completed, Canceled, Error
                    lblMsg.Text = "完成了,AsyncStatus: " + asyncStatus.ToString();
                };

            lblMsg.Text = "开始执行,3 秒后完成";
        }

        // 取消 IAsyncAction
        private void btnCancelAsyncAction_Click_1(object sender, RoutedEventArgs e)
        {
            if (_action != null)
                _action.Cancel();
        }
    }
}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索异步编程
, windows
, action
, windows store app
, windows编程
, using
, 返回app
, 进度
, #windows编程 
runtime用法
,以便于您获取更多的相关知识。

时间: 2025-01-21 04:22:51

Windows 8 Store Apps学习(45) 多线程之异步编程: IAsyncAction的相关文章

Windows 8 Store Apps学习(44) 多线程之异步编程

多线程之异步编程: 经典和最新的异步编程模型, IAsyncInfo 与 Task 相互转换 介绍 重新想象 Windows 8 Store Apps 之 异步编程 经典的异步编程模型(IAsyncResult) 最新的异步编程模型(async 和 await) 将 IAsyncInfo 转换成 Task 将 Task 转换成 IAsyncInfo 示例 1.使用经典的异步编程模型(IAsyncResult)实现一个支持异步操作的类 Thread/Async/ClassicAsync.cs /*

重新想象 Windows 8 Store Apps (45) - 多线程之异步编程: IAsyncAction, IAsyncOperation, IAsyncActionWithProgress, IAsyncOperationWithProgress

原文:重新想象 Windows 8 Store Apps (45) - 多线程之异步编程: IAsyncAction, IAsyncOperation, IAsyncActionWithProgress, IAsyncOperationWithProgress [源码下载] 重新想象 Windows 8 Store Apps (45) - 多线程之异步编程: IAsyncAction, IAsyncOperation, IAsyncActionWithProgress, IAsyncOperat

Windows 8 Store Apps学习(48) 多线程之其他辅助类

多线程之其他辅助类: SpinWait, SpinLock, Volatile, SynchronizationContext, CoreDispatcher, ThreadLocal, ThreadStaticAttribute 介绍 重新想象 Windows 8 Store Apps 之 多线程操作的其 他辅助类 SpinWait - 自旋等待 SpinLock - 自旋锁 volatile - 必在内存 SynchronizationContext - 在指定的线程上同步数 据 CoreD

Windows 8 Store Apps学习(47) 多线程之线程同步: Semaphore等

多线程之线程同步: Semaphore, CountdownEvent, Barrier, ManualResetEvent, AutoResetEvent 介绍 重新想象 Windows 8 Store Apps 之 线程同步 Semaphore - 信号量 CountdownEvent - 通过信号数量实现线程同步 Barrier - 屏障 ManualResetEvent - 手动红绿灯 AutoResetEvent - 自动红绿灯 示例 1.演示 Semaphore 的使用 Thread

Windows 8 Store Apps学习(46) 多线程之线程同步: Lock等

多线程之线程同步: Lock, Monitor, Interlocked, Mutex, ReaderWriterLock 介绍 重新想象 Windows 8 Store Apps 之 线程同步 lock - 其实就是对 Monitor.Enter() 和 Monitor.Exit() 的一个封装 Monitor - 锁 Interlocked - 为多个线程共享的数字型变量提供原子操作 Mutex - 互斥锁,主要用于同一系统内跨进程的互斥锁 ReaderWriterLock - 读写锁 示例

Windows 8 Store Apps学习(43) 多线程之任务

多线程之任务: Task 基础, 多任务并行执行, 并行运算(Parallel) 介绍 重新想象 Windows 8 Store Apps 之 任务 Task - 基于线程池的任务(在 System.Threading.Tasks 命名空间下) 多 Task 的并行执行 Parallel - 并行计算(在 System.Threading.Tasks 命名空间下) 示例 1.演示 Task(基于线程池的任务)的基本应用 Thread/Tasks/TaskDemo.xaml <Page x:Cla

Windows 8 Store Apps学习(42) 多线程之线程池

多线程之线程池: 延迟执行, 周期执行, 在线程池中找一个线程去执行指定的方法 介绍 重新想象 Windows 8 Store Apps 之 线程池 通过 ThreadPoolTimer 实现延迟执行 通过 ThreadPoolTimer 实现周期执行 通过 ThreadPool 实现"在线程池中找一个线程去执行指定的方 法" 示例 1.通过 ThreadPoolTimer 实现延迟执行(ThreadPoolTimer 在 Windows.System.Threading 命名空间下)

Windows 8 Store Apps学习(41) 打印

介绍 重新想象 Windows 8 Store Apps 之 打印 示例 1.需要打印的文档 Print/PrintPage.xaml <Page x:Class="XamlDemo.Print.PrintPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xam

Windows 8 Store Apps学习(21) 动画: ThemeTransition(过渡效果)

介绍 重新想象 Windows 8 Store Apps 之 动画 ThemeTransition 的概述 EntranceThemeTransition - 页面间跳转时的过渡效果 ContentThemeTransition - 内容改变时的过渡效果 RepositionThemeTransition - 位置改变时的过渡效果 PopupThemeTransition - 弹出时的过渡效果 AddDeleteThemeTransition - 添加项或删除项时的过渡效果 ReorderThe