I don't fully understand the consequences of this, which is always a great way to code.

Dispose() is auto generated by managed c++, and delegates to the destructor.

Calling Dispose twice will call the destructor twice which will have it access some invalid memory. We should null out fields and not attempt to access the clientAdapter after the WebView has been disposed once