WPF延时操作实现---Application.DoEvents()

WPF延时操作实现---Application.DoEvents()十二烷基硫酸钠
WPF 延时操作实现 — Application.DoEvents()
如果是在Winform中,我们可以这样实现
sleep延时⽅法:
System.Threading.Thread.Sleep(1000);//毫秒
在C#窗⼝程序中,如果在主线程⾥调⽤Sleep,在Sleep完成之前, 界⾯呈现出假死状态,不能响应任何操作!
下边实现的是⾮独占性延时函数,延时过时中界⾯仍可响应消息:
曲靖师范学院教务网络管理系统public static void Delay(int milliSecond)
{
int start = Environment.TickCount;
while(Math.Abs(Environment.TickCount - start)< milliSecond)//毫秒
{
Application.DoEvents();//可执⾏某⽆聊的操作
}
}
关于Math.Abs():
  Environment.TickCount,内部API是⽤DWORD GetTickCount()来实现的,该属性的值从系统计时器派⽣,并以 32 位有符号整数的形式存储。因此,如果系统连续运⾏,TickCount 将在约 24.9 天内从零递增⾄ Int32. MaxValue ,然后跳⾄ Int32. MinValue (这是⼀个负数),再在接下来的 24.9 天内递增⾄零。DWORD是⽆符号的,⽽ Environment.TickCount属性返回的值是有符号的,所以有⼀半的值⽤负数表⽰!
芬尼根的守灵夜关于Application.DoEvents() :
此⽅法可以⽴即处理当前在消息队列中的所有 Windows 消息。 这样可以使界⾯不会出现假死的状况;但是WPF中没有
Application.DoEvents()这个函数;
WPF中使⽤延时操作的⽅法:
集里中学
(WPF中没有Application.DoEvents()函数)
public static void Delay(int milliSecond)
{
int start = Environment.TickCount;
while(Math.Abs(Environment.TickCount - start)< milliSecond)//毫秒
{
DispatcherHelper.DoEvents();
}
}
public static class DispatcherHelper
{
[SecurityPermissionAttribute(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)]
public static void DoEvents()
{
DispatcherFrame frame =new DispatcherFrame();
Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Background,new DispatcherOperationCallback(ExitFrames), frame);
try{ Dispatcher.PushFrame(frame);}
catch(InvalidOperationException){}
}
统一平台
private static object ExitFrames(object frame)
{
((DispatcherFrame)frame).Continue =false;
return null;
洛杉矶大地震}
}
然后调⽤:
Delay(2000);

本文发布于:2024-09-21 00:37:19,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/599960.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:延时   假死   操作   实现
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议