我做了一个类,我做了一个实例。在上述实例中,我有以下几行代码来显示和关闭启动画面。
// 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));
}
}
}
答案 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));
}