Uruchamianie wątku po zaończeniu drugiego

Forum poświęcone językowi C#.

Moderator: xxSlayeRxx

Uruchamianie wątku po zaończeniu drugiego

Sponsor

Sponsor
 

Uruchamianie wątku po zaończeniu drugiego

Postprzez dadag90 » Cz sie 13, 2015 7:20 pm

Witam.

Mam program w windowsForm i program w konsoli. Chcę uruchomić program napisany konsolowo za pomocą tego w windowsForm. Chcę też żeby uruchamiał się on za każdym razem jak skończy działać.

Pod akcję przycisku mam podpięte:
Kod: Zaznacz cały
                backgroundWorker1.RunWorkerAsync();
                backgroundWorker1.DoWork += new DoWorkEventHandler(uruchomWatek);


Funkcja, która ma się uruchomić:
Kod: Zaznacz cały
        private void uruchomWatek(object sender, DoWorkEventArgs e)
        {
            String polaczenieZDB = config.Default.adresDb + ";" + config.Default.nazwaDb + ";" + config.Default.login + ";" + config.Default.haslo;

            //przygotowuję proces
            Process pr = new Process();
            ProcessStartInfo prs = new ProcessStartInfo();
            //uruchamiam cmd
            prs.FileName = "cmd";
            // /c START uruchamia program w cmd, przekazuję tutaj prametry
            prs.Arguments = " /c START " + " " + @sciezkaDoSlaveTextBox.Text + " " + ipAdresTextBox.Text + " "
                            + numerPortuTextBox.Text + " " + polaczenieZDB + " " + pobierzZadaniaDoSpr();
            pr.StartInfo = prs;
           
            //uruchamiam proces w nowym wątku
            ThreadStart ths = new ThreadStart(() => pr.Start());
            Thread th = new Thread(ths);
            th.IsBackground = true;
            th.Start();
        }


Próbowałem zrobić pętlę while (true), w której próbowałem sprawdzać czy proces zakończył się wykonywać (HasExited). Próbowałem czekać aż się skończy wykonywać (WaitForExit na procesie, Join() na wątku, na bgworker IsBusy). Nic nie działa i nie mam pojęcia jak to rozwiązać.
dadag90
Member
 
Posty: 10
Dołączył(a): Cz lis 03, 2011 9:31 am

Re: Uruchamianie wątku po zaończeniu drugiego

Postprzez developer » Pt sie 14, 2015 7:44 am

problem dość zawiły, ale ja napiszę tak:

odpuść sobie wszelkie pętle - nic to ne da poza zapętlenien programu a w konsekwencji jego wyłożeniem. Zamiast tego odpal proces tak jak dotychczas, tylko wrzuć instrukcję odpalenia procesu i tworzenia wątku do jednej metody;
Jebać ACPL......
developer
Member
 
Posty: 14
Dołączył(a): So lis 02, 2013 5:30 pm

Re: Uruchamianie wątku po zaończeniu drugiego

Postprzez dadag90 » Pt sie 14, 2015 8:24 am

to chyba jest w jednej metodzie, albo ja nie rozumiem czegoś.

Może uproszczę zapis. Chcę żeby mój program napisany konsolowo uruchomił się po tym jak się skończy :-)
dadag90
Member
 
Posty: 10
Dołączył(a): Cz lis 03, 2011 9:31 am

Re: Uruchamianie wątku po zaończeniu drugiego

Postprzez dadag90 » So sie 15, 2015 11:21 am

Poradziłem sobie z tym.

Stworzyłem klasę dziedziczącą po BgWorker:
Kod: Zaznacz cały
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace master
{
    class BackgroundThread : BackgroundWorker
    {
        public BackgroundThread()
        {
            this.WorkerSupportsCancellation = true;
        }

        protected override void OnDoWork(DoWorkEventArgs e)
        {
            try
            {
                base.OnDoWork(e);
            }
            catch (Exception ex)
            {

            }
        }
        public void Run()
        {
                if (this.IsBusy)
                {
                    return;
                }
                else
                {
                    this.RunWorkerAsync();
                }
        }

        public void Stop()
        {
            this.CancelAsync();
            this.Dispose();
        }
    }
}


Fukcja wygląda tak:
Kod: Zaznacz cały
       private void uruchomWatek(object sender, DoWorkEventArgs e)
        {
            String polaczenieZDB = config.Default.adresDb + ";" + config.Default.nazwaDb + ";" + config.Default.login + ";" + config.Default.haslo;

            ProcessStartInfo prs = new ProcessStartInfo();


            prs.FileName = File.ReadAllBytes(master.Properties.Resources.TcpClient.); //Environment.GetFolderPath(Environment.SpecialFolder.System);
            // /c START uruchamia program w cmd, przekazuję tutaj prametry
            prs.Arguments = ipAdresTextBox.Text + " " + numerPortuTextBox.Text + " " + polaczenieZDB + " " + pobierzZadaniaDoSpr();

            Process.Start(prs).WaitForExit();
        }


Ponowne uruchomienie wątku robię za pomocą RunWorkerCompleted
dadag90
Member
 
Posty: 10
Dołączył(a): Cz lis 03, 2011 9:31 am

Re: Uruchamianie wątku po zaończeniu drugiego

Sponsors

Sponsor
 


Powrót do C#

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 8 gości