And Krool, another suggestion, but I haven't thought this one out completely.

Scenario: After last SyncCallback event, I may want to trigger main thread events/actions but want the thread released immediately. If I call those actions from the SyncCallback event, thread is help up (synchronous after all).

Solutions? Maybe a terminate event can be raised after the thread is killed. But additionally, passing a value to that event that is set inside the SyncCallback event. Maybe your ThreadCancelBoolean idea can have another property (variant, user defined)? And that value is passed to the terminate event? As a workaround, I was considering a timer event or PostMessage type event (asynchronous). However, a terminate event with optional value would be ideal I think.