C# Shell Kommando ausführen und Invalidate der Main Form

bill

Commodore Special
Mitglied seit
18.02.2003
Beiträge
419
Renomée
4
Hallo!

Ich habe ein kleines Programm in C# geschrieben, bei dem man in einer Listbox bestimmte Elemente anlegen kann, dann auf einen Execute Button drückt, wodurch dann die Einträge in einem Kommandozeilentool einzeln bearbeitet werden.

Ist die Bearbeitung erfolgreich, wird das Element grün markiert, ansonsten rot. Genau hier ist jetzt der kleine Haken : Der Aufruf der Kommandozeile (über System.Diagnostics.Process)
wird in einer for-Schleife durchgeführt (für jedes Element der ListBox eben) und am Schluss einer Iteration, rufe ich für die ListBox "Invalidate(true)" auf. Dies klappt leider nicht! Die Items verschwinden und werden nicht mehr angezeigt.

Es scheint so, dass der Kommandozeilenprozess sich die Komplette Scheduling-Zeit des Programms krallt und somit die Invalidate-funktion zu kurz kommt. Sobald nämlich die for-Schleife durchgelaufen ist, werden alle Items entsprechend gefärbt.

Weis jemand einen Rat, woran das liegen könnte und wie ichs verhindern kann?? Eventuell müsste ich den Kommandozeilenaufruf in einen eigenen Thread aufrufen, nur wüsste ich nicht wie. Würde das was bringen?

Alle Hilfen sind willkommen ;D

Gruß,
bill
 
Den Angaben der MSDN zufolge musst du noch Update() aufrufen, um die Neuzeichnung durchzuführen.

http://msdn2.microsoft.com/en-us/netframework/xz8ytzt0(VS.80).aspx schrieb:
Calling the Invalidate method does not force a synchronous paint; to force a synchronous paint, call the Update method after calling the Invalidate method. When this method is called with no parameters, the entire client area is added to the update region.

http://msdn2.microsoft.com/en-us/netframework/system.windows.forms.control.update(VS.80).aspx schrieb:
The Invalidate method governs what gets painted or repainted. The Update method governs when the painting or repainting occurs. If you use the Invalidate and Update methods together rather than calling Refresh, what gets repainted depends on which overload of Invalidate you use. The Update method just forces the control to be painted immediately, but the Invalidate method governs what gets painted when you call the Update method.

Im übrigen wird ja ein neuer Prozess gestartet. Dieser würde dein Programm nur blockieren, wenn du entsprechend den Parametern darauf wartest. Hier wäre der Code ggfs. mal ganz nützlich.
 
Zuletzt bearbeitet:
Super, danke dir für die Antwort! Kann es nur leider grad nicht testen, da der Code bei mir im Geschäft liegt ;D Deswegen konnte ich auch kein Code einfügen...werde es morgen dann mal nachholen, wenn es noch zu weiteren Problemen kommen sollte.
 
Hallo!

Wollte nur nochmal bestätigen, dass es das war! Danke dir nochmals!

Gruß,
bill
 
Zurück
Oben Unten