超时关闭在控制台中无法关闭启动画面

Close with timeout is not working in Console to close splashscreen

我做了一个class,我做了一个实例。在上述实例中,我有这些代码行来显示和关闭启动画面。

// Open (show)
public void ShowSplashScreen(bool autoClose = false)
{
    splashscreen.Show(autoClose, true);
}

// Close (don't show)
public void CloseSplashScreen()
{
    splashscreen.Close(TimeSpan.FromSeconds(0.3));
}

它显示正常,但从不关闭,只是停留在那里。

这是启动画面关闭的文档:https://docs.microsoft.com/en-us/dotnet/api/system.windows.splashscreen.close?view=netframework-4.8

[System.Security.SecurityCritical]

public void Close (TimeSpan fadeoutDuration);

注意:我使用的是show方法,参数AutoClose设置为falseTopMost设置为true,这样就可以了不会自动关闭,因为我想以编程方式关闭它并且不订阅现有事件。


我是 运行 来自控制台(.NET 框架)应用程序的代码行,用于测试目的,然后再将其完全实施到我的 UI 中。


我尝试过的: 在调用 close.

之前调试甚至尝试再次调用 show

class 肯定有问题,因为调用 class 并直接操作 属性 有效:

ClassSplashScreen rss = new ClassSplashScreen();
rss.splashscreen.Show(false);
rss.splashscreen.Close(TimeSpan.FromSeconds(1));

我最好的猜测是什么东西挂在 UI 上并冻结了?但是我不确定该怎么办。


用于运行测试的代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;

namespace NamespaceName
{
    public class WhosebugCode
    {
        static void Main(string[] args)
        {
            ClassSplashScreen screen = new ClassSplashScreen();
            screen.ShowSplashScreen();
            screen.CloseSplashScreen();
        }

    }
    public class ClassSplashScreen
    {
        public SplashScreen splashscreen { get; set; }
        public ClassSplashScreen()
        {
            splashscreen = new SplashScreen("Resource Image Link");
        }
        public void ChangeSplashResource(SplashScreen resource)
        {
            splashscreen = resource;
        }
        public void ShowSplashScreen(bool autoClose = false)
        {
            splashscreen.Show(autoClose, true);
        }
        public void CloseSplashScreen()
        {
            splashscreen.Close(TimeSpan.FromSeconds(1));
        }
    }
}

SplashScreen 依赖调度程序,但默认情况下控制台应用程序中没有调度程序。如果您创建 System.Windows.Application,它应该按预期工作:

public class WhosebugCode
{
    [STAThread]
    static void Main(string[] args)
    {
        Application app = new Application();
        app.Startup += (s, e) => 
        {
            ClassSplashScreen screen = new ClassSplashScreen();
            screen.ShowSplashScreen();
            screen.CloseSplashScreen();
        };
        app.Run();
    }
}

public class ClassSplashScreen
{
    private readonly SplashScreen splashscreen;

    public ClassSplashScreen() => splashscreen = new SplashScreen("Resource Image Link");

    public void ShowSplashScreen() => splashscreen.Show(false);

    public void CloseSplashScreen() => splashscreen.Close(TimeSpan.FromSeconds(1));
}