WPF界面假死Thread.Sleep卡死的问题解决方法
程序员文章站
2022-03-19 22:41:09
...
在winform中用Application.DoEvents()可以解决,但是WPF没有.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;
}
}
然后添加一个函数
public static void Delay(int mm)
{
DateTime current = DateTime.Now;
while (current.AddMilliseconds(mm) > DateTime.Now)
{
DispatcherHelper.DoEvents();
}
return;
}
然后把该用Thread.Sleep(xxx)的地方改成Delay(xxx) 即可