Domanda

Ho una domanda.

Per prima cosa visualizzare una schermata iniziale, una forma, e questo schizzo chiamerei un'altra forma.

Problema: Quando viene visualizzato il modulo di apertura, se poi aprire un'altra applicazione sulla parte superiore della spruzzata, e quindi ridurre al minimo la finestra dell'applicazione di recente apertura, la schermata iniziale diventa bianco. Come evitare questo? Voglio che il mio tocco da visualizzare in modo chiaro e non influenzata da qualsiasi applicazione.

È stato utile?

Soluzione

È necessario visualizzare la schermata iniziale in un thread diverso -. Al momento il nuovo codice di modulo di caricamento sta bloccando thread dell'interfaccia utente della schermata iniziale

Inizia un nuovo thread, e su quel thread creare il tuo schermata iniziale e chiamare Application.Run(splash). Che iniziare una nuova pompa messaggio su quel thread. Avrete quindi bisogno di fare la chiamata principale thread dell'interfaccia utente di nuovo al thread dell'interfaccia utente della schermata di avvio (ad esempio con Control.Invoke / BeginInvoke) quando è pronto, in modo che la schermata iniziale può chiudersi.

La cosa importante è fare in modo che non si tenta di modificare un controllo dell'interfaccia utente dal thread sbagliato -. Utilizzare solo quella che il controllo è stato creato il

Altri suggerimenti

Il framework .NET è eccellente supporto incorporato per la splash screen. Avviare un nuovo progetto WF, Project + Aggiungi riferimento, selezionare Microsoft.VisualBasic. Aggiungere un nuovo form, lo chiamano frmSplash. Aperte Project.cs e farlo sembrare come questo:

using System;
using System.Windows.Forms;
using Microsoft.VisualBasic.ApplicationServices;

namespace WindowsFormsApplication1 {
  static class Program {
    [STAThread]
    static void Main(string[] args) {
      Application.EnableVisualStyles();
      Application.SetCompatibleTextRenderingDefault(false);
      new MyApp().Run(args);
    }
  }
  class MyApp : WindowsFormsApplicationBase {
    protected override void OnCreateSplashScreen() {
      this.SplashScreen = new frmSplash();
    }
    protected override void OnCreateMainForm() {
      // Do your time consuming stuff here...
      //...
      System.Threading.Thread.Sleep(3000);
      // Then create the main form, the splash screen will close automatically
      this.MainForm = new Form1();
    }
  }
}

Ho avuto un problema simile si potrebbe desiderare di check-out. Il Stack Overflow rispondere mi sono funzionato perfettamente per me - si consiglia di prendere uno sguardo.

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