Jeszcze jeden bład - eInvalidOperation....:(

0

Piszę program, który liczy ilość znaków w pliku (tzn. jest to jedna z jego funkcji).
Procedura licząca znaki jest osobnym wątkiem programu, wykonuje ona pętle, która zwiększa wartość odpowiedniej zmiennej w tablicy, równocześnie zwiększająć MainForm.Gauge1.Progress (czyli to samo co progressbar, tyle że z procentami).
Pętla jest wykonywana raz dla każdego znaku, czyli przy pliku o objętości 10 MB pętla zostanie wykonana 10 milionów razy.

I tu jest mój problem:

Kiedy pętla liczy duży plik, wszystko działa jak należy, liczenie znaków trwa około minuty i Gauge1 działa bez zarzutów.

Natomiast kiedy plik jest mały (np. 1000 bajtów), program generuje bład "EInvalidOperation with message 'Canvas does not allow drawing'"

Czy ktoś wie na czym polega ten błąd i jak mu zaradzić?

PS: mam nadzieje, że wszystko przejrzyście wyjaśniłem:)

0

Canvas nie zezwala na rysowanie po nim.

0

tyle to i ja się domyśliłem. problem polega na tym, że ja nic nie rysowałem na Canvas. W całym źródle programu ani razu nie odwołałem się do jakiegokolwiek Canvas.

Z tego wynika że musiał to za mnie zrobić Delphi. Pytanie brzmi: Po co?

0

Pewnie jest jakiś błąd związany z Gauge... bo chcąc, niechcąc rysujesz po Gauge...

0

Po dokładnym zanalizowaniu programu (wcześniej nie miałem na to czasu), stwierdziłem, że błąd nie wyskakuje podczas pętli, tylko zaraz po jej zakończeniu, gdzie znajduje się instrukcja

ShowMessage('skończono');

Sorki za pomyłkę, nie ma to jak dokładna analiza programu...

Jednal czy ktoś wie czemu instrukcja showMessage mogła wywołać błąd? Może ma to coś wspólnego z tym,że jest ona wywołana przez dodatkowy wątek programu?

0

Jednal czy ktoś wie czemu instrukcja showMessage mogła wywołać błąd? Może ma to coś wspólnego z tym,że jest ona wywołana przez dodatkowy wątek programu?

Zapewne właśnie o to chodzi. Procedura showmessage zatrzymuje główny wątek programu, więc pewnie ma to jakiś związek.

1 użytkowników online, w tym zalogowanych: 0, gości: 1