Hallo Leute, ich bin's mal wieder.
Ich arbeite nach wie vor an meinem Overlay-Programm - und habe mittlerweile auch einige Dinge getauscht, um es soweit funktionsfähig zu machen - zwar noch nicht so wie ich das letztendlich möchte, aber daran arbeite ich dann später - in ruhiger Minute.
Nun zu meinem Problem (in Kurzform):
Ich habe ein Programm, das quasi wie folgt arbeitet:
auf dem Control-Panel wird ein Button geklickt
Button -> führt Sub aus, das den Wert in einer Spalte um 1 erhöht.
Hiernach werden kurze Berechnungen ausgeführt, ob der Button noch weiter aktiv werden darf
Hiernach wird eine Sub gestartet, mit der eine Bitmap vom Panel erstellt und gespeichert werden soll.
Diese Bitmap wird dann von einem Stream-Programm kontinuierlich eingelesen.
Funktioniert soweit auch gut. Jetzt habe ich nur das Problem, dass wenn man zu schnell hintereinander klickt, die Bitmaps zwar auch korrekt gezeichnet werden (das letzte überschreibt immer das davor), nur die Streaming-Software bei zu schneller Neuzeichnung bei einem alten Bitmap hängen bleibt (und manchmal auch gar keines findet). Ich vermute, dass bei zu schnellem Neuerstellen der Datei, das Streaming-Programm versucht die Datei neu einzulesen, während diese noch gar nicht erstellt wurde. Bzw. auch, dass wenn das Neuzeichnen Event zu schnell getriggert wird, er anfangen möchte die Datei zu zeichnen, obwohl die vorherige noch gar nicht fertig ist.
Deshalb nun zu meiner Frage:
Kann ich irgendwie mit meinem Programm "warten" bis die Bitmap-Zeichnung fertig ist, bevor weiterer Code ausgeführt wird? Ich habe ja gedacht, dass weiterer Code danach erst ausgeführt wird, wenn der komplette Prozess dahinter fertig ist. Aber anscheinend wird nach dem Befehl des Speicherns der Bitmap schon weitergemacht, während das speichern in die Datei noch andauert und unter Windows erstellt wird.
Ich habe schon gedacht, es ergäbe vllt Sinn, das Zeichnen der Bitmap in einen Backgroundworker auszulagern und bei aktivem BGW die Aktion abzubrechen und neu anzusetzen (also aktuelle Bilder verwerfen, wenn es neue gibt). Doch da ich mit der Bitmapmethode auch GUI-Aktionen ausführe, bekomme ich immer STA-Thread Fehlermeldungen.
Ic hhabe schon versucht, mich in Threads und dergleichen reinzulesen. Doch im Augenblick raucht mir der Kopf, weil ich nicht ganz verstehe, wer z.B. Invoke ausführen muss, wo der Delegate stehen muss, wann ich invoken muss... etc. Ich bin noch nicht lange dabei, arbeite mich aber immer weiter an die ganzen Thematiken ran. Habt also bitte etwas Nachsicht mit mir Danke
Ich arbeite nach wie vor an meinem Overlay-Programm - und habe mittlerweile auch einige Dinge getauscht, um es soweit funktionsfähig zu machen - zwar noch nicht so wie ich das letztendlich möchte, aber daran arbeite ich dann später - in ruhiger Minute.
Nun zu meinem Problem (in Kurzform):
Ich habe ein Programm, das quasi wie folgt arbeitet:
auf dem Control-Panel wird ein Button geklickt
Button -> führt Sub aus, das den Wert in einer Spalte um 1 erhöht.
Hiernach werden kurze Berechnungen ausgeführt, ob der Button noch weiter aktiv werden darf
Hiernach wird eine Sub gestartet, mit der eine Bitmap vom Panel erstellt und gespeichert werden soll.
Diese Bitmap wird dann von einem Stream-Programm kontinuierlich eingelesen.
Funktioniert soweit auch gut. Jetzt habe ich nur das Problem, dass wenn man zu schnell hintereinander klickt, die Bitmaps zwar auch korrekt gezeichnet werden (das letzte überschreibt immer das davor), nur die Streaming-Software bei zu schneller Neuzeichnung bei einem alten Bitmap hängen bleibt (und manchmal auch gar keines findet). Ich vermute, dass bei zu schnellem Neuerstellen der Datei, das Streaming-Programm versucht die Datei neu einzulesen, während diese noch gar nicht erstellt wurde. Bzw. auch, dass wenn das Neuzeichnen Event zu schnell getriggert wird, er anfangen möchte die Datei zu zeichnen, obwohl die vorherige noch gar nicht fertig ist.
Deshalb nun zu meiner Frage:
Kann ich irgendwie mit meinem Programm "warten" bis die Bitmap-Zeichnung fertig ist, bevor weiterer Code ausgeführt wird? Ich habe ja gedacht, dass weiterer Code danach erst ausgeführt wird, wenn der komplette Prozess dahinter fertig ist. Aber anscheinend wird nach dem Befehl des Speicherns der Bitmap schon weitergemacht, während das speichern in die Datei noch andauert und unter Windows erstellt wird.
Ich habe schon gedacht, es ergäbe vllt Sinn, das Zeichnen der Bitmap in einen Backgroundworker auszulagern und bei aktivem BGW die Aktion abzubrechen und neu anzusetzen (also aktuelle Bilder verwerfen, wenn es neue gibt). Doch da ich mit der Bitmapmethode auch GUI-Aktionen ausführe, bekomme ich immer STA-Thread Fehlermeldungen.
Ic hhabe schon versucht, mich in Threads und dergleichen reinzulesen. Doch im Augenblick raucht mir der Kopf, weil ich nicht ganz verstehe, wer z.B. Invoke ausführen muss, wo der Delegate stehen muss, wann ich invoken muss... etc. Ich bin noch nicht lange dabei, arbeite mich aber immer weiter an die ganzen Thematiken ran. Habt also bitte etwas Nachsicht mit mir Danke