The Xceed FTP Library v1.1 ActiveX control supports both the Single-Threaded Apartment model (STA) and the Multi-Threaded Apartment model (MTA). The entire library's code is threadsafe, can be instantiated multiple times in order to perform multiple FTP operations at the same time, and is designed to use very little memory per instance – so your machine won't run out of memory when you're running dozens of instances at the same time.
The XceedFtp control also supports background processing. Background processing is a different concept than running multiple instances simultaneously. See the BackgroundProcessing property topic for details.
Each instance of the XceedFtp or XceedQuickFtp control can only execute one process at a time. This makes sense, because if it was possible for a single instance to run more than one operation at a time, you would get the same event from two processes and wouldn't know for which process you are getting the event. Running multiple simultaneous operations involves having multiple instances, with each instance running its own operation. If you try to avoid this limitation, the library will return the FTP_E_BUSY error code.
If you're using forms in your application, you can place multiple XceedFtp control objects on your form, call them XceedFtp1, XceedFtp2, XceedFtp3, etc. Each control on the form is a separate instance of the library. Therefore, each instance's methods can be called simultaneously and can each process at the same time.
For example, place 4 XceedFtp controls on a form, with 4 buttons, and 4 progress bars. For the click event of Button1, add code to connect and send a file that refers to the XceedFtp1 control. Set Button1's caption to "done" when the file has been sent so you can know when it finished. In the XceedFtp1 control's FileTransferStatus event, set ProgressBar1's value to the nBytesPercent parameter provided to you by the FileTransferStatus event. Do this 4 times, changing Button1 for Button2, XceedFtp1 for XceedFtp2, and ProgressBar1 for ProgressBar2. Make sure each button sends a different file to avoid conflicts locally or on the remote FTP server. Now run your program, and click on each button one after the other. If you are transferring large enough files, each progress bar should be moving along at its own pace once each instance’s connection has been established and file transfer started.
If you're using code, it's pretty much the same concept: Instantiate the control multiple times and instruct each instance to do whatever you want it to.