Domanda

sto mostrando una forma iniziale avviando immediatamente un nuovo thread prima di eseguire la mia forma principale.

Nel metodo che è gestito da questa discussione, sto usando Application.Run come mostrato in Opzione 1 qui sotto. È questo un modo corretto di fare questo, o ci sono problemi mi aspetta becaue ho chiamato Application.Run due volte? Un'alternativa è l'opzione 2, mostrata anche sotto dove io chiamo .ShowDialog () per visualizzare il modulo.

Il modulo di apertura si chiude dopo un tempo specificato, controllato nella forma stessa, ed entrambe le opzioni sembrano funzionare bene.

Quindi la mia domanda è: quale è preferito - Opzione 1 o 2? Se si potesse dare ragioni specifiche per l'uno o l'altro che sarebbe grande.

Grazie.

Snippet di Main:

// Run splash screen thread.
Thread splash = new Thread(new ThreadStart(ShowSplash));
splash.Start();

// Run main application.
Application.Run(new MainForm());

opzione Mostra la forma iniziale 1:

    static void ShowSplash()
    {
        Application.Run(new SplashForm());
    }

opzione Mostra la forma iniziale 2:

    static void ShowSplash()
    {
        using (SplashForm splash = new SplashForm())
        {
            splash.ShowDialog();
        }
    }
È stato utile?

Soluzione

Altri suggerimenti

L'opzione 2 sarà probabilmente eseguito nei guai, perché allora si utilizza la stessa Mesageloop come MainForm, ma da un altro thread.

L'opzione 1 va bene.

Mi rendo conto che questo può essere un punto di vista insolito, ma non avete pensato di utilizzare una schermata iniziale e invece mostrare le informazioni sulla 'pagina di benvenuto' o '?> Informazioni su' schermo, invece?

Ci sono una manciata di motivi per fare questo:

  1. A meno che non si entra in multi-threading, una schermata iniziale non può ridisegnare correttamente se un po 'di avviso / msgbox si apre sopra la parte superiore di esso, negando il beneficio della schermata di avvio del tutto.

  2. schermi
  3. Splash che mostrano 'avete plugin x, y, z' installato non si può davvero dire questo fino a che l'informazione è stata caricata su. Per il momento queste informazioni viene caricato, la vostra applicazione è pronto ad andare, quindi potrete sia chiudere la schermata iniziale o sarà nel modo dell'utente.

  4. Se guardo lontano e manca la schermata iniziale, mi mancherai tutte le informazioni che mi stai dicendo. Se 'licenza scade in 3 giorni' fa parte di tali informazioni, e oggi è Venerdì, che significa che non si renderà conto che il Lunedi, non posso utilizzare l'applicazione. Oscuro, ma l'ho visto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top