About the form thing you can use the Form's BeginInvoke/Invoke to execute code on the form's thread then avoiding all the problems said above