Quick Tips: Trabalhando com processos do windows - Parte 7

 

Nesta quick veremos como listar as threads de um determinado processo.

 

Vamos utilizar o mesmo exemplo anterior, só que agora adicione mais um listBox.




Ao selecionarmos o processo, iremos carregar todas as suas threads no listBox3. Para isso, vamos criar o seguinte método:

 

public void LoadThreads(Process processo)

{

    //Limpa o listBox3

    listBox3.Items.Clear();

    //Carrega todas as threads do processo

    ProcessThreadCollection threads = processo.Threads;

    //percorre todas as trheads e adiciona no listBox3

    foreach (ProcessThread t in threads)

    {

        //se thread estiver com estado Wait então exibe o motivo do espera

        if (t.ThreadState==ThreadState.Wait)

            listBox3.Items.Add(t.Id.ToString() + " | " + t.ThreadState.ToString() + " | " + t.WaitReason.ToString() + " | " + t.PriorityLevel.ToString());

        else

            listBox3.Items.Add(t.Id.ToString() + " | " + t.ThreadState.ToString() + " | " + t.PriorityLevel.ToString());

    }

}

 

Agora basta incluirmos a chamada a este método no método LoadInfoProcess, que ficará assim:

 

public void LoadInfoProcess(Process processo) {

    label2.Text = "Estado do processo: " + GetProcessState(processo).ToString();

    label3.Text = "Nome do processo: " + processo.ProcessName;

    label4.Text = "Prioridade do processo: " + processo.PriorityClass.ToString();

    label5.Text = "Arquivo de execução: " + processo.StartInfo.FileName;

    label6.Text = "Total de memória física: " + (processo.WorkingSet64 / 1024).ToString("d");

    label7.Text = "Total de memória virtual: " + (processo.VirtualMemorySize64 / 1024).ToString("d");

    label8.Text = "Tempo de processamento: " + processo.TotalProcessorTime.ToString();

    label9.Text = "Pico de consumo de memória física: " + processo.PeakWorkingSet64.ToString("d");

    label10.Text = "Pico de consumo de memória virtual: " + processo.PeakVirtualMemorySize64.ToString("d");

    label11.Text = "Mínimo permitido de consumo de memória: " + processo.MinWorkingSet.ToString();

    label12.Text = "Máximo permitido de consumo de memória: " + processo.MaxWorkingSet.ToString();

    LoadModules(processo);

    LoadThreads(processo);

}

 

O resultado que temos é o seguinte:




É isso aí pessoal, nossa série termina aqui. Espero que tenham gostado.

Fiquem a vontade para criticar, tirar dúvidas e sugerir novos temas.
Abraço.

Ricardo Coelho