c # una forma bloccando l'altro in un progetto WinForm
Domanda
Ho un'applicazione che utilizza 2 forme, una forma principale e di un modulo di apertura viene utilizzato nella seguente configurazione:
public class MainForm : Form
{
public MainForm()
{
SplashScreen splash = new SplashScreen();
// configure Splash Screen
}
}
public class SplashScreen
{
public SplashScreen()
{
InitializeComponent();
// perform initialization
this.ShowDialog();
this.BringToFront();
}
}
NB: modulo principale è creato con il seguente codice:
Application.Run( new MainForm() );
Il problema di cui sopra è che la configurazione di spruzzo non si verifica meno spruzzata viene chiusa con
splash.Close();
solo quando ciò si verifica fa il resto della corsa costruttore MainForm. come posso facilmente fermare questo comportamento bloccando?
Soluzione
I già risposto a voi con un esempio di lavoro, dall'altro domanda che hai chiesto la stessa cosa:
Altri suggerimenti
In generale, è necessario mostrare schermate di avvio su un thread separato, e lasciare che il thread primario proseguire con il caricamento. Non banale - in particolare, è necessario utilizzare Control.Invoke
a chiedere la schermata iniziale di chiudersi quando è pronto (affinità di thread) ...
Usa splash.Open () piuttosto che splash.OpenDialog () e questo non accadrà.
In sostanza, si vuole mostrare solo si splash forma, ma non lasciate bloccare la principale forma.
Ecco come ho fatto:
class MainForm : Form {
SplashScreen splash = new SplashScreen(); //Make your splash screen member
public MainForm()
{
splash.Show(); //Just show the form
}
}
Poi, nel tuo MainForm_Load fate la vostra inizializzazione come normale.
Ora, quando il modulo è pronto per essere visualizzato (MainForm_Shown):
public MainForm_Shown()
{
splash.Close();
}
In questo modo il carico MainForm normalmente durante la visualizzazione della schermata iniziale.