Exactly. When your worker finishes you could return a collection of ObjectIds to the main thread. Then you wouldn't have to search for them, nor would you be unnecessarily opening and applying the DBText.AdjustAlignment() method to text entities that existed in the database before you ran the worker.
I'm not sure how much difference this will make. I'm thinking it would depend upon on how many other entities (particularly text entities) you have in your drawings. But this is what I would do.
For an example of how to return data from a background worker you can refer to the "Return a value from the background operation" at the bottom of this post :
I understand I did what you recommended and it worked perfectly, had a gain in performance and I am pleased with the results, and again thank Artvegas!
I just wanted to re-iterate the warning that someone else already made that AcDb (the entity code) is absolutely not multi-thread safe. So, while your background thread is running, if the Acad main thread does anything that uses any of the AcDb code that text is using, you are very likely to have problems.
I understand that the risk of performing transactions outside the main thread can cause problems, but I've imported some 368,000 objects between (Polylines, Text, Blocks etc. ..), and so far had no problems, saved the file its countless times and performed tests and everything is correct. Yet another study it more secure way to do the job, and I am studying the proposal made in a video (taget Gopinath, member of the Autodesk Developer), which teaches how to work with multi-thread smoothly.
Parallel Programming in an AutoCAD® Application
I just came across a link for another class at Autodesk University...
Multithreading and Message Handling in Windows® Presentation Foundation (WPF) Applications:
And the class description...
"If your AutoCAD® plug-in spends a long time processing data, you know how frustrated your users can get when their user interface freezes or Windows shows that all too familiar "Program Not Responding" message. How do you prevent that? Depending on what you are doing, you have a choice between message handling and multithreading. This class will show you when to use each technique and how to handle them both from within your WPF user interface."
I haven't watched it yet but it seems that this discusses the exact issue you are trying to address - so hopefully will be most useful to you.
Log into access your profile, ask and answer questions, share ideas and more. Haven't signed up yet? Register