Je suis en train de programmer un programme d'installation qui installe un nouveau logiciel et ainsi de suite, et en plus, je veux lire des choses matérielles comme l'architecture CPU et ainsi de suite. Mais cela prend un certain temps, donc je veux afficher un écran d'accueil pendant que le programme lit le matériel. Mais ça ne s'affichera pas et je ne sais pas pourquoi.C# Splash Screen n'affiche pas
Quelqu'un peut-il m'aider, s'il vous plaît?
Dans l'en-tête du MainClass créer un nouveau Thread
:
public Hauptfenster()
{
InitializeComponent();
t = new Thread(new ThreadStart(ZeigeLadeBildschirm));
t.Start();
}
Lorsque le Thread
commence le SplashScreen doit être affiché et le matériel doit être lu par le MainClass. Ainsi, la méthode « ZeigeBildschirm » dit:
public void ZeigeLadeBildschirm()
{
SplashScreen sp = new SplashScreen();
sp.Show();
createFolder();
entpacken();
Verionszahlalsd();
GetHardwareInformationRAM();
GetOSInformation();
GetReleaseDateBIOS();
GetLastBootTime();
GetHardwareInfoVideo();
GetHardwareInfoMonitor();
GetSystemInfo();
GetCDDriveInformation();
GetDiskDriveInformation();
GetHardwareInfoCPU();
GetInstallDateWindows();
}
pour arrêter le Mainthread alors que le nouveau Thread
lit le matériel que je codé ceci après la création du Thread
dans l'en-tête:
while (t.IsAlive)
{
}
Ainsi, les regards d'en-tête comme ceci:
public Hauptfenster()
{
InitializeComponent();
Initialisierung();
t = new Thread(new ThreadStart(ZeigeLadeBildschirm));
t.Start();
while (t.IsAlive)
{
}
GetAdditionRAMInfo();
SchreibeDaten();
}
mais quand je lance le programme, le matériel est lu mais pas SplashScreen est affiché à l'écran. Une fois le code de lecture du matériel terminé, MainForm s'ouvre et affiche toutes les données. Comment puis-je corriger ce code, de sorte que le SplashScreen
sera affiché, le matériel sera lu et le SplashScreen
disparaîtra et le MeinForm sera affiché?
Code de SplashScreen
:
namespace The5thBlueskyInstallerSplashScreen
{
public partial class SplashScreen : Form
{
public SplashScreen()
{
InitializeComponent();
}
}
}
Il semble que votre while attend dans le thread principal et bloque l'interface utilisateur. –
J'ai ouvert la question car le titre était intéressant, mais j'ai recherché la classe SplashScreen et elle dit: "L'écran de démarrage est affiché en utilisant du code natif, avant que l'instance de l'application WPF soit créée.". De cela, il semble que lorsque vous voulez utiliser c'est déjà trop tard. Essayez d'utiliser (au lieu de thread) la méthode .Show (bool), lisez HW, puis la méthode .Close (timeSpan) lorsque vous avez terminé. Juste deviner mais vaut la peine d'essayer. –
@Mark, c'est WinForms, pas WPF, et le code (partiel) pour SplashSceen est dans la question. –