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

时间:2019-06-26 08:04:44

标签: c# wpf methods console-application instance

我做了一个类,我做了一个实例。在上述实例中,我有以下几行代码来显示和关闭启动画面。

// 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]

     

公共无效关闭(TimeSpan fadeoutDuration);

注意:我正在使用show方法,并将参数AutoClose设置为false,并且将TopMost设置为true,这使其不自动关闭,因为我想以编程方式将其关闭而不订阅现有事件。


在完全将其实施到我的UI中之前,我正在运行控制台(.NET Framework)应用程序中的代码行以进行测试。


我尝试过的方法: 在调用show之前进行调试,甚至尝试再次调用close


在调用类并直接操纵属性时,类肯定是出问题的了:

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 StackOverFlowCode
    {
        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));
        }
    }
}

1 个答案:

答案 0 :(得分:4)

SplashScreen依赖于调度程序,但是默认情况下控制台应用程序中没有调度程序。如果创建System.Windows.Application,它应该可以正常工作:

public class StackOverFlowCode
{
    [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));
}