<p>For the moment the best way that I have found to be able to manipulate DOM from a string that contain HTML is:</p>

<pre><code>WebBrowser webControl = new WebBrowser();
webControl.DocumentText = html;
HtmlDocument doc = webControl.Document;
</code></pre>

<p>There are two problems:</p>

<ol>
<li>Requires the <code>WebBrowser</code> object! </li>
<li>This can't be used with multiple threads; I need something that would work on different thread (other than the main thread).</li>
</ol>

<p>Any ideas?</p>

Depending on what you are trying to do (maybe you can give us more details?) and depending on whether or not the HTML is well-formed, you
could
convert this to an
```
XmlDocument
```
:
```
```
System.Xml.XmlDocument x = new System.Xml.XmlDocument();
x.LoadXml(html); // as long as html is well-formed, i.e. XHTML
```
```
Then you could manipulate it easily, without the
```
WebBrowser
```
instance. As for threads, I don't know enough about the implementation of
```
XmlDocument
```
to know the answer to that part.
If the document isn't in proper form, you could use
NTidy
(.NET wrapper for
HTML Tidy
) to get it in shape first; I had to do this very thing for a project once and it really wasn't too bad.