Welcome

首页 / 软件开发 / .NET编程技术 / Windows 8 Store Apps学习(42) 多线程之线程池

Windows 8 Store Apps学习(42) 多线程之线程池2013-12-10 cnblogs webabcd多线程之线程池: 延迟执行, 周期执行, 在线程池中找一个线程去执行指定的方法

介绍

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

通过 ThreadPoolTimer 实现延迟执行

通过 ThreadPoolTimer 实现周期执行

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

示例

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

Thread/ThreadPool/DelayTimer.xaml

<Pagex: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 += "任务取消了";}}}}