If you’ve got separate contexts for each thread, you do not need to make them current on each draw call. Just once, at startup.
What you get is quite a normal behavior.
Then make your method to access rendering context that tries to get it untill succeedes. In other words, make a wrapper around MakeCurrent. That’s what I did long time ago to make it work properly with multithread access.
I tried this method. But if I tried MakeCurrent second time, it returned ok, but next call of MakeCurrent for this thread return ERROR_BUSY. It makes my component very slow.
I hope there is normal method for fix this problem.
A “normal” method would be using critical sections (or similar synchronization mechanism) to protect access to each context, or implementing all drawing in threads that own contexts and develop a mechanism to send them messages telling them what to draw.