PDA

View Full Version : [c#] Finestra all'apertura applicazione


mto89
29-01-2010, 21:55
ciao, ho fatto una sorta di task manager in c#, e ci mette 3-4 secondi ad avviarsi.
Volevo fare una finestrella che in quei secondi visualizzasse una barra di caricamento.
Ho due grosse domande:
- Primo ho creato una form con progress bar, ma esiste un modo per farla caricare in maniera esatta fino all'apertura del form principale?
- Secondo io nella form principale ho una cosa del tipo:
public Form1()
{
InitializeComponent();
...
}

E l'inizializzazione dei componenti è la parte gravosa come tempo, per cui volevo che la finestra con progressbar apparisse prima del tipo:
public Form1()
{
FormConBarra splash = new FormConBarra();
splash.Show();

InitializeComponent();

splash.Close()
}
Che però non funziona in quanto la form che si apre prima di "partire" aspetta il caricamento della principale.

Chi mi sa dare delle dritte su come visualizzare stato caricamento all'avvio? e fare apparire la form prima del programma principale?

mto89
29-01-2010, 22:31
Ho pensato che la progressbar la potrei far avanzare con un timer per tot secondi fissi(tipo3-4) prima che si chiuda e sia pronta l'applicazione (se farlo in maniera precisa è troppo complicato).

Però come apro la form di caricamento prima della principale' (che nel frattempo deve essere caricata non in attesa)? Devo usare un altro thread? perchè ho provato buttar giù qualcosa ma non mi ritrovo :(

Coi thread avevo abbozzato così(dove form3 è la form che vorrei all'inizio):
public Form3()
{
InitializeComponent();
Thread a = new Thread(new ThreadStart(avvia));
a.Start();
}
public void avvia()
{
timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
if (progressBar1.Value < 100)
progressBar1.Value++;
}

enella form principale prima che inizializzi i proprio componenti nel costruttore, ho istanziato un form3 e fatto il show(), però rimane in caricamento, evidentemente ho fatto errori...

mto89
30-01-2010, 10:43
up

^TiGeRShArK^
30-01-2010, 15:25
puoi farlo semplicemente utilizzando i servizi del VB.NET come spiegato qui:
http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/8af9fd3e-f679-40b4-976a-46f42319e9a5/

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

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