zoukankan      html  css  js  c++  java
  • 让正执行的程序暂停几秒钟

    在做一个医院的计时器的时候,让播放开始声音后在开始倒计时,当中用到了让程序暂停的问题,所以就总结了一下

    一:第一种方法

    可以用一个简单的方法来实现暂停效果,就是直接在代码中插入Thread.Sleep(3000),但是这样你会感觉你的用户界面假死了,因为Thread.Sleep(3000)会使当前线程休眠,而你在窗口界面所在的线程中执行,界面也就没有响应了。
     
    二:第二种方法
    这个方法与第一种方法差不多,即Application.DoEvents()方法,但是不会使界面失去响应,给用户带来较好的用户体验,可是DoEvents也带来了效率上的问题,处理同样的一个事件调用了DoEvents后效率降低了好几倍,此方法可以让界面线程执行正在等待执行的一系列事件,然后再执行下面的语句,你可以封装这样一个方法来实现延迟执行代码效果:
    public void 延迟(int 毫秒)
    {
        var t = DateTime.Now.AddMilliseconds(毫秒);
        while (DateTime.Now < t) 
            Application.DoEvents();
    }
    使用时只需:
        语句1……;
        语句2……;
        延迟(6000);
        语句3……
    这样就可以实现延迟。
     
    *注:Application.DoEvents()方法是在Winfrom 当中的,但是在WPF里面是没有Application.DoEvents();方法的,所以要在WPF里面用这个方法就请看下面的代码实现。
     1 public static class DispatcherHelper
     2     {
     3         [SecurityPermissionAttribute(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)]
     4         public static void DoEvents()
     5         {
     6             DispatcherFrame frame = new DispatcherFrame();
     7             Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Background, new DispatcherOperationCallback(ExitFrames), frame);
     8             try { Dispatcher.PushFrame(frame); }
     9             catch (InvalidOperationException) { }
    10         }
    11         private static object ExitFrames(object frame)
    12         {
    13             ((DispatcherFrame)frame).Continue = false;
    14             return null;
    15         }
    16     } 

    在需要暂停的地方调用即可:DispatcherHelper.DoEvents();

    如下面的示例:

    1     //让它暂停3秒种
    2     var t = DateTime.Now.AddMilliseconds(3000);
    3     while (DateTime.Now < t)
    4          DispatcherHelper.DoEvents();//这里就可以调用了
  • 相关阅读:
    原创【cocos2d-x】CCMenuItemToggle 在lua中的使用
    SQL Server之LEFT JOIN、RIGHT LOIN、INNER JOIN的区别
    VS的IISExpress配置通过IP访问程序
    SQLServer执行大脚本文件时,提示“无法执行脚本没有足够的内存继续执行程序 (mscorlib)”
    jqGrid中multiselect: true 操作checkbox
    display:table的几个用法(元素平分宽度,垂直居中)
    ASP.NET中 前后台方法的相互调用
    AspxGridView使用手记
    大量文本框非空判断,如何提高灵活性?
    Mysql安装、配置、优化
  • 原文地址:https://www.cnblogs.com/softwyy/p/8875737.html
Copyright © 2011-2022 走看看