欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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) 即可

相关标签: wpf