none
bir butona basınca birden fazla işlemi sırasıyla teker teker yaptırma RRS feed

  • Genel Tartışma

  • Merhaba,

    C# ile geliştirdiğim programda bir problem ile karşılaştım ve çözemedim.
    Bir butona basınca dışarıdan Process sınıfını kullanarak parametre ile birden fazla executable dosya çalıştırıyorum. Arada dosya kopyalamaları da yapıyorum. Fakat ard arda kodları yazdığım zaman tüm exe dosyaları aynı anda çalışıyor. Bu benim işime yaramıyor. İstediğim şey bu exe dosyaları teker teker biri bitince 2. si çalışsın şeklindedir.

    Sırasıyla,
    1- xyz1.exe çalışacak bitince
    2- xyz2.exe bitince
    3- xyz3.exe bitince
    4- 2 dosya kopyalanacak bitince
    5- xyz4.exe bitince
    olmalı bunları nasıl kontrol edebilirim? Kodlarım aşağıdaki gibidir. Yardımcı olacaklara şimdiden teşekkürler.


    private void btnWzCreateWz_Click(object sender, EventArgs e)
            {
                if (txtWzPath.Enabled == true)
                { 

                    // create a wz
                    System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
                    startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
                    startInfo.FileName = "C:\\xxxxxx\\exe\\xxxx\\xyz1.exe";
                    // startInfo.CreateNoWindow = true;
                    startInfo.Arguments = "-c -z \"" + txtWzPath.Text + "\" -F \"" + txtNcProgrammer.Text + "\" -r \"" + txtNcPrefix.Text + "\" -C \"" + txtTolerance.Text + "\" -G \"" + txtComment.Text + "\" -I S -v";
                    Process.Start(startInfo);
                    MessageBox.Show("Wz succesfully created", "Message", MessageBoxButtons.OK, MessageBoxIcon.Information);

                }

                else
                {
                    MessageBox.Show("Please select Workzone path!");

                }

                if (txtLbGeometry.Enabled == true)
                { 

                    //import ig data
                    System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
                    startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
                    startInfo.FileName = "C:\\xxxxxx\\exe\\xxxx\\xyz2.exe";
                    // startInfo.CreateNoWindow = true;
                    startInfo.Arguments = "-c -f IG \"" + txtLbGeometry.Text;
                    Process.Start(startInfo);
                    importIges.Enabled = true;

                }

                else
                {
                    MessageBox.Show("Please insert IGES geometry!");

                }

                if (importIges.Enabled == true)
                {

                    // calculate ig geometry
                    System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
                    startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
                    startInfo.FileName = "C:\\xxxxxx\\exe\\xxxx\\xyz3.exe";
                    // startInfo.CreateNoWindow = true;
                    startInfo.Arguments = "-c -z \"" + txtWzPath.Text + "\" -f \"" + txtLbGeometry.Text + "\" -I S -a";                
                    Process.Start(startInfo);
                    System.Threading.Thread.Sleep(30000);


                    //copy ig geometry
                     System.IO.FileInfo kopyala = new FileInfo(dosya);
                     File.Copy(dosya, klasor + "\\" + textBox2.Text);
                     File.Copy(dosya, klasor + "\\" + textBox3.Text);
                     MessageBox.Show("Dosya başarıyla kopyalandı");


                }

                else
                {
                    MessageBox.Show("ig geometry could not calculate!");

                }

                if (txtGeoStock.Enabled == true)
                {
                    // calculate stock geometry
                    System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
                    startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
                    startInfo.FileName = "C:\\xxxxxx\\exe\\xxxx\\xyz4.exe";
                    startInfo.Arguments = "-c -z \"" + txtWzPath.Text + "\" -k \"" + txtGeoStock.Text + "\" -a";                
                    Process.Start(startInfo);
                }

                else
                {
                    MessageBox.Show("Stk geometry could not calculate!");

                }

    2 Nisan 2018 Pazartesi 08:37

Tüm Yanıtlar

  • merhaba asenkron programlama konusuna bakmanı öneririm

    ayrıca bu linkte istediğini bulabileceğini umuyorum (Multithread)

    http://www.csharpnedir.com/articles/read/?id=584


    • Düzenleyen TyfnCtn 2 Nisan 2018 Pazartesi 08:44
    2 Nisan 2018 Pazartesi 08:43
  • Process Proc = Process.Start(startInfo);
    do { if (!Proc.HasExited) Proc.Refresh(); } while (!Proc.WaitForExit(1000));
    
    Process.Start(startInfo); satırlarını yukarıdaki gibi düzenleyin ve sonra koyu renk ile belirttiğim ifadeleri ekleyin...

    Sorunuzun yanıtı bu ise "Yanıt olarak işaretle"yerek siz de forumun işleyişine katkıda bulununuz...

    2 Nisan 2018 Pazartesi 08:51
  • Merhaba,
    bu kod işime yaradı gibi duruyor. İlginize teşekkür ederim.
    Proc.WaitForExit(1000) 10sn sonra kapat gibi birşey mi?
    2 Nisan 2018 Pazartesi 09:08
  • teşekkürler inceleyeceğim.
    2 Nisan 2018 Pazartesi 09:09
  • HasExited, işlemden çıkılmışsa anlamındadır. Refresh, işlemin son durum bilgilerini alır ve ilgili değişkenlere eşitler.

    WaitForExit, işlemin bitmesini bekle anlamındadır. 1000 ise milisaniye olarak zaman aşımı süresidir. 1 Saniye içinde işlemden çıkış yapılmamışsa artık bekleme anlamındadır.


    Sorunuzun yanıtı bu ise "Yanıt olarak işaretle"yerek siz de forumun işleyişine katkıda bulununuz...


    2 Nisan 2018 Pazartesi 09:39
  • HasExited, işlemden çıkılmışsa anlamındadır. Refresh, işlemin son durum bilgilerini alır ve ilgili değişkenlere eşitler.

    WaitForExit, işlemin bitmesini bekle anlamındadır. 1000 ise milisaniye olarak zaman aşımı süresidir. 1 Saniye içinde işlemden çıkış yapılmamışsa artık bekleme anlamındadır.


    Sorunuzun yanıtı bu ise "Yanıt olarak işaretle"yerek siz de forumun işleyişine katkıda bulununuz...


    teşekkürler.
    2 Nisan 2018 Pazartesi 09:55
  • selam ,

      düzelttiğin kodu benimle de paylaşabilir misin ?

    zira aynı kodu yapmam gerekiyor fakat çözemediğimde.

    test.exe çalışacak bitince

    test.exe çalışacak bitince

    test.exe çalışacak bitince 

    test.exe çalışacak bitince

    test.exe çalışacak bitince

    program kapınıcak

    21 Aralık 2019 Cumartesi 09:44