Prozesse Durchsuchen

Neue Frage »

Auf diesen Beitrag antworten »
InformaTiger Prozesse Durchsuchen

Hallo,
es handelt sich hierbei nur indirekt um ein Problem, ich habe nämlich folgenden Code geschrieben der funktioniert. Er ließt die laufenden Prozesse aus und ändert je nachdem ob ein Prozess läuft oder nicht den BorderStyle der Picture Boxen. Nur das Problem ist ich würde gerne verstehen warum der auskommentierte nicht funktioniert, weil der meiner Ansicht nach der selbe sein müsste.

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
  
            while (this.Visible)
            {
                this.Invoke((MethodInvoker)delegate
                {
                    Process[] Processes = Process.GetProcesses().Distinct().ToArray();
                    List<string> Processnames = new List<string>();

                    for (int i = 0; i < Processes.Length; i++)
                    {
                        Processnames.Add(Processes[i].ProcessName);
                    }

                    for (int i = 0; i < Controls.Count; i++)
			        {
                        if (Processnames.Contains(Path.GetFileNameWithoutExtension(this.Controls[i].Name)))
                        {
                            ((PictureBox)this.Controls[i]).BorderStyle = BorderStyle.Fixed3D;
                        }
                        else
                        {
                            ((PictureBox)this.Controls[i]).BorderStyle = BorderStyle.None;
                        }

                        /*foreach (Control c in this.Controls)
                        {
                            if (Path.GetFileNameWithoutExtension(c.Name) == Processes[i].ProcessName)
                            {
                                ((PictureBox)c).BorderStyle = BorderStyle.Fixed3D;
                            }
                            else
                            {
                                ((PictureBox)c).BorderStyle = BorderStyle.FixedSingle;
                            }
                        }*/

                    }
                });
                Thread.Sleep(50);


Wahrscheinlich ist das ganze hier ersichtlich einfach und ich blamiere mich gerade, dass ich es nicht sehe aber wissen würde ich es trotzdem gerne.

Edit: Funktionieren im Grunde tun ja beide Varianten, nur bei der auskommentierten "flakern" die Picture Boxen weil sie so schnell aktualisiert werden.

Augenzwinkern

Mfg
InformaTiger
 
Auf diesen Beitrag antworten »
eulerscheZahl

Warum wandelst du das Array in eine List um? Die hat nur dann Vorteile, wenn du häufig etwas löschen/anhängen willst. Bei einer festen Länge ist ein Array schneller.

Ich verstehe nicht ganz, wo der auskommentierte Teil stehen soll und was dann stattdessen inaktiver Code wäre.
Da du in foreach auf Processes[i] zugreifst, vermute ich folgende Struktur:
code:
1:
2:
3:
for (int i = 0; i < Controls.Count; i++)
    foreach (Control c in this.Controls)
        ((PictureBox)c).BorderStyle = (Path.GetFileNameWithoutExtension(c.Name) == Processes[i].ProcessName) ? BorderStyle.Fixed3D : BorderStyle.FixedSingle;

in foreach änderst du den Borderstyle für jede PictureBox und durch die for-Schleife machst du das wiederholt. Das bewirkt das Flackern.
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »