设置首页收藏本站
开启左侧

WPF界面假死Thread.Sleep卡死的问题解决方法

[复制链接]
绝地武士 发表于 2021-7-19 16:15:50 | 显示全部楼层 |阅读模式
在winform中用Application.DoEvents()可以解决,但是WPF没有.DoEvents()方法了,可以用如下代码代替:
  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. }
复制代码

然后添加一个函数
  1. public static void Delay(int mm)
  2.         {
  3.             DateTime current = DateTime.Now;
  4.             while (current.AddMilliseconds(mm) > DateTime.Now)
  5.             {
  6.                 DispatcherHelper.DoEvents();
  7.             }
  8.             return;
  9.         }
复制代码

然后把该用Thread.Sleep(xxx)的地方改成Delay(xxx) 即可。

转自:https://blog.csdn.net/wnk1997/article/details/106103208
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
cgsn 发表于 2023-2-22 14:29:52 | 显示全部楼层
學到了,感謝分享!
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表