[WebBrowser] Un click Thread-Safe

Publié le 01 septembre 2009 par Jeremy.jeanson

Quand on manipule des objets HtmlElement obtenus via un WebBrowser, le code suivant est bien pratique pour déclencher l’évènement onclick dans la page web :

Vb

monHtmlElement.RaiseEvent("onclick")

C#

monHtmlElement.RaiseEvent("onclick");

Malheureusement ce code n’est pas Thread-Safe et déclenchera un erreur quand il serra lancé via un thread autre que celui qui a servi à instancier le WebBrowser.

Dans ces moment là on se dit qu’il n’y a rien de grave là dedans, on a un control winform, et donc ont peut utiliser sa méthode Invoke quand elle est requise (exemple : voir cet article)…

Oui, oui, c’est une idée, mais cela ne marche pas. Une erreur se produira quand même.

Pour s’en sortir : il faut utiliser la méthode InvokeMember du HtmlElement et surtout lui passer un argument. Sans argument une erreur peut se produire. Voici un exemple de code:

Vb

Dim param As New Object()
monHtmlElement.InvokeMember("onclick", param)

C#

Object param = new Object();
monHtmlElement.InvokeMember("onclick", param);