Софтуерно Инженерство
Loading...
BraveFrontier avatar BraveFrontier 0 Точки

C# контролиране на стартираните процеси от апликация чрез PID и Control Tab-ове

Здравейте. Цял ден си напъвам мозъка да го измисля, но явно ще трябва да опирам до чужда помощ. Та така, какво искам да направя ?

Целта ми е да управлявам няколко стартирани процеса от една и съща апликация чрез PID.

Да речем, че апликацията се казва game.exe. В програмата имам бутон, който стартира апликацията. След като се стартира, програмата взема PID на стартирания процес и го извежда като име на първия Control Tab. PID на процеса се задава като стойност на static int променливата t1Pid за да мога да извиквам процеса по PID чрез отделните функции.

 

        private void button1_Click(object sender, EventArgs e)
        {
            bool started = false;
            var p = new Process();

            p.StartInfo.FileName = "game.exe";

            started = p.Start();

            try
            {
                var procId = p.Id;
                tabControl1.TabPages.Add(Convert.ToString(procId));

                    t1Pid = procId;

            }
            catch (InvalidOperationException)
            {
                started = false;
                MessageBox.Show("Invalid operation ex");
            }
            catch (Exception ex)
            {
                started = false;
                MessageBox.Show("Exception ex");
            }
        }

Имам 2 бутона.
Първия бутон стартира процеса както се вижда от кода по-горе.

Сега да речем, че пуснем 3 процеса game.exe и програмата ни се добавят 3 Control Tab-а (пример: 4906 | 9066 | 7522).
Се да кажем, че затворя един от 3-те процеса (този с PID 7522).

Като натисна втория бутон трябва по някакъв начин програмата да се ориентира кой от стартираните процеси (PID) вече го няма и съответно да затвори неговия Control Tab.

Благодаря!

Тагове:
0
C# Fundamentals
kolioi avatar kolioi 395 Точки

Понеже първо натискаш бутон и тогава проверяваш кои от стартираните процеси все още са активни, този код ще ти свърши работа

process.Refresh();
if(process.HasExited)
{
    tabControl1.TabPages.Remove(t1Pid.ToString());
}

process е всеки един от стартираните процеси. Ако искаш обаче програмата ти да получава съобщение ако някой от процесите е приключил и автоматично да затваря съответния tab, трябва да изпозваш събитието process.Exited, виж този пример.

0