In addition, there are a number of techniques that mark a program as deeply suspect, and likely to break.
Finally, there are a number of techniques which represent poor style, some exceptionally poor, which violate principles of modularity and which result in programs that are clumsy to construct, difficult to debug, and impossible to maintain.
An Exit Process or Exit Thread (or anything that conceals them) will bypass this effect.
Note that in MFC, explicitly terminating a thread is always a potentially fatal operation, because the per-thread handle maps are not cleaned up, including temporary objects.
You had an internal data structure consistency error. Note that __try/__finally will guarantee cleanup, but only if the thread does not terminate; so while the __finally clause is "guaranteed" to execute, this guarantee applies only if control passes through it.
Here is the view: At first glance everything appears like it should work just fine.
When we click the “Start Process” button, we generate 1,000,000 items, add them to a list, and then set the Items Source of the List Box to the items we generated.
“Hingle Mc Cringleberry” didn’t realize he was pushing 1,000,000 individual updates to the UI within milliseconds. Since messages that say “go update this” have a higher priority that a render/paint message, it never gets around to re-rendering /repainting the UI. I mean, you don’t have to update the UI every singlle time. As always, feel free contact me on my blog, connect with me on Twitter (@brianlagunas), or leave a comment below for any questions or comments you may have.
You just need to give your end-user a really close estimate of completion. In this case, we said I will update the UI every 1500 items being generated.