I think your problem may have something to do with how Microsoft.NET handles user interface elements. Basically, any control method should be called from the thread that created it (possibly even the main user interface thread). Otherwise, you will get a bunch of access-related exceptions. I believe that you will need to use the InvokeRequired and Invoke properties to call into the control, which also means that you will need to define a delgate function that wraps each method that you want to call. Using the WebBroweser.Url property as an example, you can write something like this:
public delegate void SetWebAddressDelegate ( WebBrowser browser, Uri newUrl);
public void SetWebAddress ( WebBrowser browser, Uri newUrl )
{
if (browser.InvokeRequired)
browser.Invoke(new SetWebAddressDelegate(SetWebAddress), browser, newUrl);
else
browser.Url = newUrl;
}