Splash Screen(Threads)

0

Witam, mam problem otóż, gdy odpalam aplikację wszystko działa pojawia się splash screen. Problem pojawia się dopiero, gdy przejdę na inną Formę i chcę wróć do początkowej to od nowa mi się wyświetla Splash screen. Jak mogę to zablokować, żeby wyświetlał się tylko raz przy starcie aplikacji ?


//Fragment z maina
   public Main()
        {
            
            var t = new Thread(Loading);
            
            t.Start();
            InitializeComponent();
           Thread.Sleep(1000);
            t.Abort();
        }

        private void Loading()
        {
        Application.Run(new Splash());
        }

// Druga forma
   private void metroTile2_Click(object sender, EventArgs e)
        {
            var t = new Thread(Watek);
            t.Start();
            Close();
        }

        public static void Watek()
        {
           Application.Run(new Main());
        }


0

Niby sobie poradziłem zrobiłem w taki sposób, ale nie do końca jestem przekonany czy tak może być

 public   class test
    {
        public static int liczba { get; set; }
    }

   private void metroTile2_Click(object sender, EventArgs e)
        {
           test etest = new test();

            test.liczba= 1;

            
            var t = new Thread(Watek);
            t.Start();
            Close();
           
        }

```  li = test.liczba;
          

            if (li == 0)
            {
                var t = new Thread(Loading);

                t.Start();
                InitializeComponent();
                Thread.Sleep(1000);
                t.Abort();
            }
            else
            {
                InitializeComponent();
            }

0

Witam,

A po co podłączasz ten Splash Screen do formatki, wcześniej nie możesz tego wywołać? I ogólnie po co Ci to?

Pozdrawiam,

mr-owl

0

SplashScreen robi się inaczej. W metodzie Main (wejście aplikacji) tworzysz i pokazujesz splasha. Dopiero jak go pokażesz to tworzysz formę główną. I dopiero z formy głównej możesz zamknąć splasha. Z tym Application.Run też trochę poleciałeś. Wiesz, co robi Application.Run? Tworzy nową główną pętlę komunikatów. To powinno być zrobione TYLKO RAZ.

0

Czyli jaki jest dobry sposób użyć timera i żeby po odpowiedniej ilości czasu przeszło na inną formę ?

1

Jak chcesz to robić timerem (chociaż to zupełnie bez sensu) to po prostu daj sleep'a w metodzie Main. Pokaż splasha daj sleepa, zamknij splasza i wystartuj aplikację. Coś takiego:

static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            Splash s = new Splash(); //możliwe, że tu będziesz musiał podać właściciela jako aplikację
            s.Show();            
            Thread.Sleep(2000);
            s.Close();
            s.Dispose();
            
            Application.Run(new MainForm());
        }
}
1

ja w swojej aplikacji przed wywołaniem okna głównego dodałem

 Thread t = new Thread(new ThreadStart(SplashScreen));
                t.Start();
                Thread.Sleep(5000);
                InitializeComponent();
                t.Abort();

splash jest w oddzielnym projekcie i wszystko działa jak należy no i jak bym chciał to mogę go wywołać praktycznie w dowolnym miejscu w aplikacji :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1