Я сделал класс, я делаю пример. В указанном случае у меня есть эти строки кода, чтобы показать и закрыть заставку.
// 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
, установленными на false
, и TopMost
, установленными на true
, это не позволяет автоматически закрывать, так как я хочу закрыть его программно, а не подписаться на существующие события.
Я запускаю строки кода из консольного приложения (.NET Framework) в целях тестирования, прежде чем полностью внедрить его в мой пользовательский интерфейс.
Что я пробовал:
Отладка и даже попытка вызова show
снова перед вызовом close
.
Это определенно что-то не так с классом, так как вызов класса и непосредственное манипулирование свойством работают:
ClassSplashScreen rss = new ClassSplashScreen();
rss.splashscreen.Show(false);
rss.splashscreen.Close(TimeSpan.FromSeconds(1));
Мое лучшее предположение, что что-то вешает интерфейс и замораживает его? Но я не уверен, что с этим делать.
Код для запуска, чтобы проверить это
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));
}
}
}