The other threads listed are all in either ntdll.dll or in USER32.dll. In each case there is no call stack to paste here, just an address within each dll. They are below:
thread ID | DLL | address
0x80c - this is the thread which was described in my original post
0x564 | USER32.dll | 0x768f7e47
0x610 | ntdll.dll | 0x77cf00fd
0xbf8 | USER32.dll | 0x768f7e47
0xf84 | ntdll.dll | 0x77cefd31
0xcf0 | ntdll.dll | 0x77cf1ee6
My app ran for almost 200 iterations before it hit this. Sometimes its as few as 13 iterations. Other times it can run for over 5000 iterations.
EDIT: how do I copy and paste the callstack please? I've tried various things but can't quite figure it out. Also, I have disabled the OnTimer method and still get the crashes. I think I have a better example to paste but it would be good to know how to copy the callstack.
Have tried to look into Debug menu?
EDIT2: I do not use GuiLock but I didn't think I needed to if I always use PostCallback to update the interface. Is this correct?
Yes. But possible problem is that it is way too easy to call something that actually needs GuiLock. E.g. reading some data from some widget or doing some operation that access GUI. (Remember that problem last time with ImageDraw?)
What if I have several threads posting GUI related callbacks to a function in the main thread?