Führen Sie mehrere UI-Threads aus

8

Springe zum Ende der Frage. Dies ist nur ein paar zusätzliche Informationen

Ich benutze eine Komponente (GeckoFX), um einige Webseiten zu rendern, gut, aber es kann nur in einem Windows-Formular verwendet werden; da es an ein WinForms-Objekt gebunden werden muss, das gezeichnet werden kann. Da alle WinForms im selben Thread laufen, kann ich immer nur eine GeckoFX-Instanz verwenden. Deshalb habe ich beschlossen, eine 'Worker-Klasse' in Form eines WinForms zu erstellen und die gesamte Logik dort hinzuzufügen. Das Formular erfordert keine Kommunikation mit dem Hauptformular.

Jetzt kann ich 10 Fenster starten, und sie werden schließlich funktionieren, aber jedes neue Formular wird warten, bevor alle anderen Formulare alle ihre GeckoFX-Ereignisse behandelt haben, da Sie nicht mehrere Instanzen in einem Thread verwenden können. Außerdem muss sich der Browser auf einem UIThread befinden. Also:

Ist es möglich, mehrere UI-Threads (einen für jedes Formular) zu erstellen?

Ich habe jemanden dabei gesehen ( Ссылка ), aber niemand hat jemals seine Code-Beispiele funktioniert. Der Typ, der es funktionierte, benutzte ursprünglich eine Form von kundenspezifischer Nachrichtenübertragung, um diese Art von Dingen zu tun, aber ich habe keine Ahnung, wie ich sowas erreichen kann.

    
Jan Jongboom 14.10.2009, 14:48
quelle

4 Antworten

9

Ich glaube nicht, dass das, was Sie fragen, wirklich das ist, was Sie wollen, aber das Erstellen einer Nachrichtenpumpe pro Thread ist einfach, Sie müssen Application.Run nur einmal pro Thread aufrufen.

%Vor%     
Julien Roncaglia 14.10.2009, 23:01
quelle
2

Verwenden Sie Application.DoEvent ().
oder
Erstellen Sie mehrere Threading-Formulare:

%Vor%     
Avram 14.10.2009 22:51
quelle
2

GeckoFx benötigt kein Formular.

%Vor%     
Scott 14.12.2010 06:02
quelle
1

Scheint so, als wäre es möglich.

Ich nahm den Hintergrund , öffnete TestApp und erstellte ein neues Form1 für die Thread / Nachrichtenpumpe # 2:

%Vor%

Das zweite Fenster reagiert auf Mausklicks usw.

Habe nicht wirklich überprüft, ob alles gut aussieht, das Freebie Visual Studio Express Edition, das ich benutze, fehlt das Debug-Fenster "Threads", ähem. Ich bin also ein bisschen im Dunkeln. Es scheint jedoch zu funktionieren. Lass es mich wissen: -).

    
rosenfield 14.10.2009 22:55
quelle