C# PictureBox visable true / false zwischen Klassenaufruf

Gast #3029120
Lesenswert?

Hallo,

ich habe folgendes Problem:

- eine PicutreBox wird per Code geleert
- danach folgt ein Funktionsaufruf über eine Klasse
- die PictureBox soll je nach Rückgabewert der Klasse ein Bild anzeigen

Das funktioniert soweit alles, nur werden die Bilder erst am Ende aller 
Funktionsaufrufe angezeigt und nicht nachdem eine Aktion abgeschlossen 
wurde. In meiner Klasse werden diverse Dateien erzeugt und das dauert 
eine gewisse Zeit. Der aktuelle Status wird bei ProgressBar angezeigt, 
das Steuerelement wird von der Form mit an die Klasse übergeben und dort 
werden die Werte gesetzt. Die ProgressBar wird auch korrekt dargestellt, 
nur die Bilder tauchen erst später auf.

Woran liegt das? Mit Threading habe ich auch schon experimentiert - ohne 
Erfolg.


Code aus meiner Form, wird über einen Button gestartet:
1
picBoxTXT.Image  = null;
2
picBoxXML.Image  = null;
3
picBoxHTML.Image = null;
4
            
5
if (classOutputData.vWriteTXT(pbWriteStatus, txtFolder.Text, strFileName))
6
    picBoxTXT.ImageLocation = Application.StartupPath + "\\img\\err.png"; 
7
else
8
    picBoxTXT.ImageLocation = Application.StartupPath + "\\img\\ok.png"; 
9
       
10
                 
11
if (OutputData.vWriteXML(pbWriteStatus, txtFolder.Text, strFileName))
12
    picBoxXML.ImageLocation = Application.StartupPath + "\\img\\err.png"; 
13
else
14
    picBoxXML.ImageLocation = Application.StartupPath + "\\img\\ok.png"; 
15

16

17
if (OutputData.vWriteHTML(pbWriteStatus, txtFolder.Text, strFileName))
18
    picBoxHTML.ImageLocation = Application.StartupPath + "\\img\\err.png"; 
19
else
20
    picBoxHTML.ImageLocation = Application.StartupPath + "\\img\\ok.png";


Auszug aus meiner Klasse:
1
vWriteTXT(ProgressBar pbNewValue, string strPath, string strFileName)
2
{
3
    pbValue = pbNewValue;
4

5
    pbValue.Minimum = 0;
6

7
    pbValue.Maximum = 100;
8

9
    // erzeuge Datei
10

11
    pbValue.Value = wStatus;
12

13
   // usw...
14
   wStatus++;
15
}
#3029395
Lesenswert?

kann sein dass du das form refreshen musst, zb über die invalidate 
methode.

http://msdn.microsoft.com/de-de/library/system.windows.forms.control.invalidate.aspx

ändert nichts dran dass man das so eigentlich nicht macht ;)
wie schon bereits gesagt solltest du die schreibmethoden auslagern, 
backgroundworker sind mit abstand am leichtesten zu handhaben

BackgroundWorker worker = new BackgroundWorker();

BackGroundworker.DoWork += (TAB TAB drücken);
in die entstandene methode den saver reinklatschen

BackGroundWorker.RunWorkerCompleted+= (TAB TAB drücken);
hier den die image property neu setzen und refreshen

BackGroundworker.ProgressChanged += (TAB TAB);

BackGroundworker.RunWorkerAsync();

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren