2009-10-24 7 views

Répondre

6

GeckoBrowser est un contrôle Windows Forms. Les propriétés et les méthodes d'un contrôle peuvent être appelées uniquement à partir du thread sur lequel le contrôle a été créé. Pour faire quoi que ce soit avec un contrôle d'un autre thread, vous devez utiliser la méthode Invoke ou BeginInvoke, par ex.

Thread thread = new Thread(delegate() 
{ 
    Action<string> action = url => GeckoBrowser.Navigate(url); 
    GeckoBrowser.Invoke(action, new object[] { "http://www.google.com/" }); 
}); 
+0

Désolé de Necro, mais que cela s'applique même lorsque le navigateur lui-même a été initialisé (et toutes les actions aussi bien!) sont effectuées sur un (STA)? Tout ce qui concerne GeckoFx se produit sur un fil séparé sans utilisation de thread-thread. Le .Navigate (...); la fonction ne fonctionne pas. –

1

Gardez à l'esprit que, en raison du moteur sous-jacent, XulRunner (XPCOM), le composant GeckoFX ne sont généralement pas multithread. C'est parce que XulRunner, lui-même, est une seule exécution threadée.

0

Cela ne fonctionne pas parce que Geckofx en lui-même ne supporte pas le Threading croisé si vous voulez faire du cross-thread vous devrez l'Invoquer en premier. fil créé à partir d'une application MTA

Thread thread = new Thread(delegate() 
    { 
     this.Invoke(new Action(() => {GeckoBrowser.Navigate("http://www.google.com/");})); 
    }); 
Questions connexes