The CVI User Interface Library is multithread safe and allows you to call most functions from multiple threads. This includes calling SetCtrlAttribute, etc from multiple threads to access the
same control. There are some caveats, like DiscardPanel should be called from the same thread that called LoadPanel for that particular panel, etc. These exclusions are noted in the various UI functions' documentation.
But I personally feel it is a good design practise to restrict as much UI operations as possible to the thread that owns the affected window (CVI panel). For example, if a program has two threads, one performing UI updates and the other performing, say, TCP communication, then I think the TCP thread should defer to the UI thread for more complex UI operations rather than calling these routines itself. The PostDeferredCallToThread function in the Utility library is useful for this. Of course, one can also use other signalling mechanisms to achieve this.