When you dealing with multithreading in your code, every data you use in more than one thread it should be a subject to your attention in the way its used in those threads. Similary, using GDI objects in multithreading does not require any special code beside some (natural) common-sense 'not to do' things, which is, dont read and modify un-synchronized in the same time. Also, remember that they have thread affinity (the thread which created the object should be the one who deletes it). The following text is from the Raymond Chen wonderful blog: Window objects: thread which created the window its said to be the window 'owner'. Messages are dispatched to a window procedure only on the thread that owns it, and generally speaking, modifications to a window should be made only from the thread that owns it. Although the window manager permits any thread to access such things as window properties, styles, and other attributes such as the window procedure, and such accesses ar...