I know it's marked as resolved, but just in case someone is interested in the multithreading option - a little demo program.

As to which is faster, MultiThreading or DoEvents, I'll leave others to argue. The obvious advantage of MultiThreading comes in when you have to perform other tasks within the same app. Make an executable of the code below and run it. Click on "Start MultiThread" and move the form around, scroll the textbox etc. The "AddTextMultiThread" function continues without even a pause. Click on "Stop MultiThread". Try the same with "Start/Stop DoEvents". Spot the difference.

'Original code at:- http://www.free2code.net/plugins/art...read.php?id=94

VB Code:
  1. Option Explicit
  2. 'Form level code.
  3.  
  4. 'MultiThread versus DoEvents.
  5.  
  6. 'Add a textbox and 4 command buttons to a form.
  7.  
  8. Private Declare Function CreateThread Lib "kernel32" (ByVal lpThreadAttributes As Any, _
  9.    ByVal dwStackSize As Long, ByVal lpStartAddress As Long, lpParameter As Any, _
  10.    ByVal dwCreationFlags As Long, lpThreadID As Long) As Long
  11.  
  12. Private Declare Function TerminateThread Lib "kernel32" (ByVal hThread As Long, _
  13.    ByVal dwExitCode As Long) As Long
  14.  
  15. Private Sub Command1_Click()
  16.    id = CreateThread(ByVal 0&, ByVal 0&, AddressOf AddTextMultiThread, ByVal 0&, 0, id)
  17. End Sub
  18.  
  19. Private Sub Command2_Click()
  20.    Call TerminateThread(id, ByVal 0&)
  21. End Sub
  22.  
  23. Private Sub Command3_Click()
  24.    StopDo = True
  25.    AddTextDoEvents
  26. End Sub
  27.  
  28. Private Sub Command4_Click()
  29.    StopDo = False
  30. End Sub
  31.  
  32. Private Sub Form_Load()
  33.    Me.Height = 4545
  34.    Me.Width = 8925
  35.    
  36.    Text1.Move 45, 45, 8700, 3525
  37.    
  38.    Command1.Move 45, 3690, 1635, 375
  39.    Command1.Caption = "Start MultiThread"
  40.  
  41.    Command2.Move 1845, 3690, 1635, 375
  42.    Command2.Caption = "Stop MultiThread"
  43.  
  44.    Command3.Move 5310, 3690, 1635, 375
  45.    Command3.Caption = "Start DoEvents"
  46.  
  47.    Command4.Move 7110, 3690, 1635, 375
  48.    Command4.Caption = "Stop DoEvents"
  49. End Sub
VB Code:
  1. 'Module level code.
  2. Option Explicit
  3.  
  4. Public id As Long
  5. Public StopDo As Boolean
  6.  
  7. Public Function AddTextMultiThread()
  8.    Do
  9.       Form1.Text1.SelText = "Adding to Text1 - "
  10.    Loop
  11. End Function
  12.  
  13. Public Function AddTextDoEvents()
  14.    StopDo = True
  15.    Do While StopDo = True
  16.       Form1.Text1.SelText = "Adding to Text1 - "
  17.       DoEvents
  18.    Loop
  19. End Function