Kontrolki C# Invalidate Update Refresh

Opiszę łopatologicznie jakie są różnice między trzema metodami służącymi do odrysowywania dowolnej kontrolki Windows w środowisku: C# .NET Framework i C# .NET CF (Compact Framework):

1. Invalidate();
2. Update();
3. Refresh().

Zaczynamy:

1. Invalidate() - odrysowuje kontrolkę, odbywa się to poprzez dodanie do kolejki komunikatów komunikatu: WM_PAINT. W rezultacie kontrolka nie jest odrysowywany od razu, lecz dopiero po obsłużeniu wszystkich zaległych komunikatów.

2. Update() - zdejmuje oczekujący w kolejce komunikat WM_PAINT, a następnie obsługuje go. W rezultacie kontrolka jest odrysowywana natychmiast. Jeśli w kolejce komunikatów nie został wcześniej umieszczony komunikat WM_PAINT, metoda nic nie robi.

Czyli w kodzie programu, gdy chcemy natychmiast odrysować kontrolkę robimy tak: kontrolka.Invalidate();
kontrolka.Update();

3. Refresh() = Invalidate() + Update().

Podsumowując: W zasadzie prawie zawsze wystarcza metoda Invalidate(), natomiast możemy ją wesprzeć metodą Update() dla natychmiastowego odrysowania, np. gdy chcemy mieć płynność animacji lub gdy wykonujemy instrukcje programistyczne, które blokują przetwarzanie komunikatów. Metoda Refresh() to nic innego jak udogodnienie dla programisty.