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

多线程之线程池: 延迟执行, 周期执行, 在线程池中找一个线程去执行指定的方法

介绍

重新想象 Windows 8 Store Apps 之 线程池

通过 ThreadPoolTimer 实现延迟执行

通过 ThreadPoolTimer 实现周期执行

通过 ThreadPool 实现“在线程池中找一个线程去执行指定的方 法”

示例

1、通过 ThreadPoolTimer 实现延迟执行(ThreadPoolTimer 在 Windows.System.Threading 命名空间下)

Thread/ThreadPool/DelayTimer.xaml

<Page
    x:Class="XamlDemo.Thread.ThreadPool.DelayTimer"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:XamlDemo.Thread.ThreadPool"
    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="btnCreateDelay" Content="延迟 3 秒后执行一个任务" Click="btnCreateDelay_Click_1" Margin="0 10 0 0" />

            <Button Name="btnCancelDelay" Content="取消任务" Click="btnCancelDelay_Click_1" Margin="0 10 0 0" />

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

Thread/ThreadPool/DelayTimer.xaml.cs

/*
 * 通过 ThreadPoolTimer 实现延迟执行(ThreadPoolTimer 在 Windows.System.Threading 命名空间下)
 *
 * ThreadPoolTimer - 计时器
 *     ThreadPoolTimer CreateTimer(TimerElapsedHandler handler, TimeSpan delay, TimerDestroyedHandler destroyed); - 创建一个用于延迟执行的计时器
 *         handler - 指定的延迟时间过后,所需要执行的方法
 *         delay - 延迟时间
 *         destroyed - 当 ThreadPoolTimer 完成了自身的使命后所执行的方法(比如延迟方法执行完了或计时器被取消了)
 *     Cancel() - 取消计时器
 *     Delay - 延迟时间,只读
 */

using System;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.System.Threading;
using Windows.UI.Core;

namespace XamlDemo.Thread.ThreadPool
{
    public sealed partial class DelayTimer : Page
    {
        private ThreadPoolTimer _timer;

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

        // 创建一个延迟计时器
        private void btnCreateDelay_Click_1(object sender, RoutedEventArgs e)
        {
            _timer = ThreadPoolTimer.CreateTimer(
                (timer) =>
                {
                    var ignored = Dispatcher.RunAsync(CoreDispatcherPriority.High,
                        () =>
                        {
                            lblMsg.Text = "任务执行了";
                        });
                },
                TimeSpan.FromSeconds(3),
                (timer) =>
                {
                    var ignored = Dispatcher.RunAsync(CoreDispatcherPriority.High,
                        () =>
                        {
                            lblMsg.Text += Environment.NewLine;
                            lblMsg.Text += "ThreadPoolTimer 的使命结束了";
                        });
                });

            lblMsg.Text = "延迟 3 秒后执行一个任务";
        }

        // 取消计时器
        private void btnCancelDelay_Click_1(object sender, RoutedEventArgs e)
        {
            if (_timer != null)
            {
                _timer.Cancel();
                _timer = null;

                lblMsg.Text += Environment.NewLine;
                lblMsg.Text += "任务取消了";
            }
        }
    }
}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索windows
, 线程
, 计时器
, 延迟
, timer
, 延迟执行
, threadpool
, 计时器实现
延迟执行方法
,以便于您获取更多的相关知识。

时间: 2024-11-27 18:51:18

Windows 8 Store Apps学习(42) 多线程之线程池的相关文章

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学习(48) 多线程之其他辅助类

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

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

多线程之异步编程: IAsyncAction, IAsyncOperation 重新想象 Windows 8 Store Apps (45) - 多线程之异步编程: IAsyncAction, IAsyncOperation, IAsyncActionWithProgress, IAsyncOperationWithProgress 介绍 重新想象 Windows 8 Store Apps 之 异步编程 IAsyncAction - 无返回值,无进度值 IAsyncOperation - 有返回

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学习(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

Windows 8 Store Apps学习(39) 契约: Share Contract

介绍 重新想象 Windows 8 Store Apps 之 契约 Share Contract - 右侧边栏称之为 Charm,其 中的"共享"称之为 Share Contract 示例 1.演示如何开发共享源 Contracts/ShareContract/ShareSource.xaml <Page x:Class="XamlDemo.Contracts.ShareContract.ShareSource" xmlns="http://sche