Hi,
ich habe eine ungewöhnliche Fehlermeldung und weißt nicht warum sie auftritt.
Ich möchte in einer Threadroutine eine Zeichnung vornehmen und diese dann anzeigen.
private Bitmap sigBitmap_1 = new Bitmap(5000,5000,System.Drawing.Imaging.PixelFormat.Format32bppArgb);
public void sigZeichnung()
{
while(this.projektspeicher.startSigApp)
{
lock(this)
{
// diese nächste Zeile verursacht den Fehler
this.sigBitmap_1.SetPixel(y,(System.Int16)this.sigDaten[0][y],System.Drawing.Color.Blue);
this.pictureBoxSigBitmap_1.Image = this.sigBitmap_1; this.pictureBoxSigBitmap_1.Refresh();
}
Ich muss noch sagen, dass die Routine bis zu den Zeichenoperationen funktioniert hat.
Die Fehlermeldung: Das Objekt wird auch irgendwo anders benutzt.
--> Es wird aber nicht!!!
Danke
Danke
amozi
Wie immer gilt: Niemals von einem Thread aus direkt GUI-Operationen vornehmen. Stichwort: Invoke/BeginInvoke.
Hallo,
nach svenson's vorschäge habe ich endlich hingekriegt, dass ich die Zeichnung ohne Probleme vornehmen kann. Ich habe in die obige Threadroutine einen Delegaten eingefügt und führe in seiner Funktion die Zeichnung durch.
Aber was mich noch stört ist der kurzeitiger Anzeigezustand des Formulars beim Aufrufen. Unzwar ist es so, dass die Steuelemente in der GUI-Thread (wie Bitmap,Picturebox) ein Loch im Formular verurschen, das 1-2Sekunden dauert. Das Grafikfenster wird viel früher erzeugt (auch die erwähnten Steuelemente) Trotzdessen tritt dieses Problem kurzzeitig beim ersten Anzeigebefehl (this.Show())auf. Momentan ist es auch so, dass keine zusätzlichen Zeichenoperationen dazu gekommen sind.
Ich weiss nicht mit was das zutun hat und habe keine Ahnung wie ich das anpacken soll. Wie kann man den Anzeigevorgang der Steuelemente beschleunigen?
Danke für die Vorschläge oder auch für die Stichpunkte.
Danke
amozi
Hi,
ich wollte mal fragen, ob ihr mir keine Ideen oder Stichpunkte zu diesem Problem schenken würdet?
Danke
Danke
amozi
Hallo amozi,
wie schnell ist der Rechner, auf dem das Phänomen auftritt?
herbivore
Pentium4 1.6GHz.
Vielleicht ist es nützlich noch zu erwähnen, dass dabei noch 2 Synchronthread's, 1 Asynchronthread (also der Thread sigZeihnung()) und dazugehöriger GUI-Thread am Laufen sind.
Danke
amozi
Hallo amozi,
dann könntest du doch (mindestens versuchsweise) diese Threads solange anhalten, bis das Show durchgeführt wird. Ansonsten könnte es sein, dass das Zeichen zu lange dauert. Da die mit BeginInvoke aufgerufenen Methoden im GUI-Thread laufen, blockieren diese Methoden auch das GUI, solange sie laufen.
herbivore