2017-01-05 5 views
1

AFAIK, sollte alle Windows Forms-Anwendung die [STAThread] Richtlinie über ihre Main() Methode setzen.STAThread Anforderung für Windows-Formulare

Es gibt jedoch eine Ausnahme. Wir schreiben Anwendungen für Windows Mobile-Geräte mit dem Compact Framework. Compact Framework unterstützt nicht einmal die [STAThread] Direktive, es hat nur die [MTAThread]. Trotzdem habe ich dort nie Probleme gehabt.

Jetzt, um es einen Schritt weiter zu gehen, können Sie auch Compact Framework-Anwendungen auf einem vollständigen Windows-System ausführen. Ich denke, dass in diesem Fall das vollständige .NET-Framework verwendet wird.

An diesem Punkt führen wir Code mit einem MTA Appartment-Status, der Windows-Formulare auf einem vollständigen Windows-System verwendet. Das bringt mich zu der Frage, , wenn eine kompakte Framework-Anwendung auf einem vollständigen Windows-Betriebssystem ausgeführt wird, warum beschweren sie sich nicht über die fehlende [STAThread] Direktive?

Antwort

1

Laut This Answer würde ich sagen, es ist nicht eigentlich Windows Forms läuft auf der normalen Maschine, sondern eine Teilmenge. Es kann natürlich auch sein, dass eine Art von Proxying stattfindet und das Framework dafür sorgt, dass ein STA-Thread bootstrappt und für Sie marshaliert wird.

Ein Kommentar auf This Question speziell:

Einfache CF-Anwendungen ohne Änderungen auf dem Desktop ausgeführt werden, ist dies gut bekannt. Apps, die nur CF-APIs verwenden (dh aygshell-bezogen), werden nicht ausgeführt. Die Kompilierungsoption STAThread kann nur während der Kompilierung (AFAIK) verwendet werden. Wenn eine DLL mit dieser Option kompiliert wurde, kann ich mir vorstellen, dass sie nicht auf dem Desktop ausgeführt wird. Für die Web-Browser-Komponente müssen Sie dieses hardcoded nicht laden, sondern aus dem Code und laden dann entweder das vollständige Framework oder das CF. CF-Formulare sind fest mit MTA codiert. Wenn eine COM geladen wird, die STA erfordert, wird eine Ausnahme ausgelöst.

Von Josef scheint, dass die kompakten Rahmenformen zusammen unter MTA rumpeln, werden gerne, um anzuzeigen, aber sobald ausflippen, wie Sie eine COM-basierte Komponente von WinForms verwenden, die STA erforderlich macht.

+2

Siehe https://social.msdn.microsoft.com/Forums/en-US/d5b637f4-56f6-417a-a004-851c8e7ca01f/stathread-can-not-be-found- but-where-is-it? forum = netfxcompact "Nein, Sie verpassen nichts - es gibt kein solches Attribut auf NETCF und es gibt keine Möglichkeit, STA-Verhalten zu erzwingen. MTA ist der einzige unterstützte Modus und in der Regel benötigen Sie keine STA auf NETCF." – josef

Verwandte Themen