Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Application.Run();


Rekomendowane odpowiedzi

Opublikowano

Cześć! Mam problem z drugą foremką, otóż: uruchamiam z Form1 wątek działający w program.cs i w tym wątku uruchamiam Form2 za pomocą Application.Run(). Problem jest taki, że po wykonaniu tej instrukcji wątek w którym się znajdowała zostaje wstrzymany czy może przeniesiony do Form2 (nie wiem jak to dokładnie działa). W każdym bądź razie dalej chciałbym móc z Form1 zamknąć Form2 tak, by wstrzymany wcześniej wątek poszedł dalej. Różnie kombinowałem, parę razy się udało ale wtedy po ponownym uruchomieniu wątku, a konkretnie ponownym wykonaniu instrukcji Application.Run(), aplikacja się crashuje. Jak rozwiązać ten problem? Dajcie jakąś radę, liczę na Waszą pomoc. :)

4417049059_6234f40fb5.jpg
Storm has passed but the destruction are still visible.

Opublikowano

Rozumiem, że chodzi ci o coś takiego

342902e672d01904c901b6a1fb5d3dc4.gif

 

 

form1

 

private void button1_Click(object sender, EventArgs e)
        {
            Program.UruchomWatek();
            var btn = sender as Button;
            btn.Text = "Uruchomiony (0)";
            this.button1.Enabled = this.button2.Enabled = false;
            Program.ShowDialog = true;
            new Task(() => Liczenie(btn)).Start();
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            Program.UruchomWatek();
            var btn = sender as Button;
            btn.Text = "Uruchomiony (0)";
            this.button1.Enabled = this.button2.Enabled = false;
            Program.ShowDialog = false;
            new Task(() => Liczenie(btn)).Start();
        }
        private void Liczenie(Button btn)
        {
            string str;
            while (true)
            {
                str = string.Format("Uruchomiony {0}", Program.iIteracje);
                if (btn.InvokeRequired)
                    btn.Invoke(new setButtonTextDelegate(setButtontext), btn, str);
                else
                    setButtontext(btn, str);
                System.Threading.Thread.Sleep(100);
            }
        }
        private delegate void setButtonTextDelegate(Button btn, string txt);
        private void setButtontext(Button btn, string txt)
        {
            btn.Text = txt;
        }
Program

  static Form2 form2;
        public static int iIteracje = 0;
        public static bool ShowDialog = false;
        public static void UruchomWatek()
        {
            new Task(() =>
            {
                form2 = new Form2();
                while (true)
                {
                    if (Application.OpenForms.OfType<Form2>().Count() == 0)
                    {
                        if (!ShowDialog)
                            form2.Show(); //nie blokuje watku
                        else
                            form2.ShowDialog(); //blokuje
                    }
                    iIteracje++;
                    System.Threading.Thread.Sleep(100);
                }
            }).Start();
        }
    }

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...