导出 (0) 打印
全部展开
信息
您所需的主题如下所示。但此主题未包含在此库中。

如何使用计时器提交工作项 (XAML)

了解如何创建在经过计时器时间后运行的工作项。

技术

说明

步骤 1: 创建单次计时器

使用 CreateTimer 方法为工作项创建计时器。提供用于完成工作的 lambda,并使用 delay 参数指定线程池在可将工作项分配给可用线程之前等待的时间。使用 TimeSpan 结构指定延迟。

注意  你可以使用 CoreDispatcher.RunAsync 访问 UI 并显示工作项的进度。

以下示例创建三分钟后运行的工作项:



TimeSpan delay = TimeSpan.FromMinutes(3);
            
ThreadPoolTimer DelayTimer = ThreadPoolTimer.CreateTimer(
    (source) =>
    {
        // 
        // TODO: Work
        // 
        
        // 
        // Update the UI thread by using the UI core dispatcher.
        // 
        Dispatcher.RunAsync(
            CoreDispatcherPriority.High,
            () =>
            {
                // 
                // UI components can be accessed within this scope.
                // 

            });

    }, delay);

步骤 2: 提供完成处理程序

如果需要,使用 TimerDestroyedHandler 处理工作项的取消和完成。 使用 CreateTimer 重载以提供其他 lambda。它在计时器被取消或工作项完成时运行。

以下示例创建提交工作项的计时器,并在工作项完成或计时器被取消时调用方法:


TimeSpan delay = TimeSpan.FromMinutes(3);
            
bool completed = false;

ThreadPoolTimer DelayTimer = ThreadPoolTimer.CreateTimer(
    (source) =>
    {
        // 
        // TODO: Work
        // 

        // 
        // Update the UI thread by using the UI core dispatcher.
        // 
        Dispatcher.RunAsync(
                CoreDispatcherPriority.High,
                () =>
                {
                    // 
                    // UI components can be accessed within this scope.
                    // 

                });

        completed = true;
    },
    delay,
    (source) =>
    {
        // 
        // TODO: Handle work cancellation/completion.
        // 


        // 
        // Update the UI thread by using the UI core dispatcher.
        // 
        Dispatcher.RunAsync(
            CoreDispatcherPriority.High,
            () =>
            {
                // 
                // UI components can be accessed within this scope.
                // 

                if (completed)
                {
                    // Timer completed.
                }
                else
                {
                    // Timer cancelled.
                }

            });
    });

步骤 3: 取消计时器

如果计时器仍在倒计时,但是已不再需要工作项,调用 Cancel。计时器被取消,工作项也不会提交到线程池。



DelayTimer.Cancel();

备注

Windows 运行时应用无法使用 Thread.Sleep,因为它会阻止 UI 线程。你可以转而使用 ThreadPoolTimer 创建工作项,这将延迟工作项完成的任务,但不会阻止 UI 线程。

如需演示工作项、计时器工作项和定期工作项的完整代码示例,请参阅线程池示例

有关重复计时器的信息,请参阅如何创建定期工作项

相关主题

快速入门:向线程池提交工作项
如何创建定期工作项
如何创建和使用预分配工作项
如何响应指定事件和信号灯
如何将函数用作工作项代理
使用线程池的最佳实践

 

 

显示:
© 2015 Microsoft