Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

STA Thread sur Compact Framework 2.0

9 réponses
Avatar
MatthieuB
Bonjour,

Je développe une application qui tourne sur un Smartphone CF2.0 (C#) qui
utilise un composant WebBrowser.
J'aimerai aussi rendre l'application compatible sous Windows.

Le problème: Quand je lance l'application sous Windows, le webbrowser lance
une exception car il veux être lancer dans un thread STA et non un thread
MTA.

Hors sous CF2.0 je n'arrive qu'à paramétrer en MTA, et je n'ai pas trouvé de
moyen de passer en STA.

Il y a t'il un moyen d'exécuter un thread en STA sous CF2.0?
Il y a t'il un moyen que lorsque le code tourne, si il est sous Windows
(donc Framework standard) il puisse se changer de lui même en STA (sans que
j'ai a tout recompiler).

Merci d'avance,

MatthieuB

9 réponses

Avatar
Gilles TOURREAU
Le Sun, 18 Nov 2007 18:01:48 +0100, MatthieuB a écrit:

Bonjour,

Je développe une application qui tourne sur un Smartphone CF2.0 (C#) qui
utilise un composant WebBrowser.
J'aimerai aussi rendre l'application compatible sous Windows.

Le problème: Quand je lance l'application sous Windows, le webbrowser
lance une exception car il veux être lancer dans un thread STA et non un
thread MTA.

Hors sous CF2.0 je n'arrive qu'à paramétrer en MTA, et je n'ai pas
trouvé de moyen de passer en STA.

Il y a t'il un moyen d'exécuter un thread en STA sous CF2.0?
Il y a t'il un moyen que lorsque le code tourne, si il est sous Windows
(donc Framework standard) il puisse se changer de lui même en STA (sans
que j'ai a tout recompiler).

Merci d'avance,

MatthieuB



Consultez la méthode Thread.SetApartmentState()

Cordialement

--
Gilles TOURREAU


S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Avatar
MatthieuB
> Consultez la méthode Thread.SetApartmentState()



J'ai déjà essayé, mais cette méthode n'est pas disponible dans le Compact
Framework 2.0...
Avatar
Gilles TOURREAU
Le Tue, 20 Nov 2007 17:32:13 +0100, MatthieuB a écrit:


Consultez la méthode Thread.SetApartmentState()



J'ai déjà essayé, mais cette méthode n'est pas disponible dans le
Compact Framework 2.0...



Ne vous est-il pas possible d'utiliser cette méthode plustot dans
l'application classique ?

Il y a une autre solution auquel il faudra définir un symbole de
compilation conditionnelle (cf. les propriétés du projets) par exemple
"MOBILE" et dans le main vous pouvez faire ceci :

#if MOBILE
[MTAThreadAttribute]
#else
[STAThreadAttribute]
#endif
static void Main()
{
....
}

Vous n'avez plus qu'à définir cette constante avant la compilation en
fonction du système cible...

Cordialement

--
Gilles TOURREAU


S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Avatar
MatthieuB
"Gilles TOURREAU" a écrit dans le message de
news:
Le Tue, 20 Nov 2007 17:32:13 +0100, MatthieuB a écrit:


Consultez la méthode Thread.SetApartmentState()



J'ai déjà essayé, mais cette méthode n'est pas disponible dans le
Compact Framework 2.0...



Ne vous est-il pas possible d'utiliser cette méthode plustot dans
l'application classique ?

Il y a une autre solution auquel il faudra définir un symbole de
compilation conditionnelle (cf. les propriétés du projets) par exemple
"MOBILE" et dans le main vous pouvez faire ceci :

#if MOBILE
[MTAThreadAttribute]
#else
[STAThreadAttribute]
#endif
static void Main()
{
....
}

Vous n'avez plus qu'à définir cette constante avant la compilation en
fonction du système cible...

Cordialement

--
Gilles TOURREAU


S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr



J'avais pensais à cela.
Mais j'ai alors deux applications differentes... une par plateforme.
Et j'aurai aimer en avoir qu'une seule.
En fait le webbrowser est le seul éléments qui pose probleme...
Avatar
Gilles TOURREAU
Le Tue, 20 Nov 2007 18:20:51 +0100, MatthieuB a écrit:


J'avais pensais à cela.
Mais j'ai alors deux applications differentes...une par plateforme.
Et j'aurai aimer en avoir qu'une seule.



Vous n'avez pas le choix de toute façon que d'avoir un executable pour
Windows classique et un autre pour Windows CE...
L'un ne pouvant pas s'executer chez l'autre et inversement !

Donc vous serez amené à 2 compilations de toute façon...

En fait le webbrowser est le seul éléments qui pose probleme...




Cordialement

--
Gilles TOURREAU


S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Avatar
MatthieuB
> Vous n'avez pas le choix de toute façon que d'avoir un executable pour
Windows classique et un autre pour Windows CE...
L'un ne pouvant pas s'executer chez l'autre et inversement !




Si justement c'est l'avantage du Framework .NET.

Toute mon application qui tourne actuellement sous Smartphone, fonctionne
aussi sur PDA et sous Windows...
A l'exception du WebBrowser. Qui pose un probleme de Thread STA.

Mais je suis sure qu'il est possible d'Exécuter du code générer à la volet
en fonction de la plateforme.
c'est à dire: faire un équivalent de ceci mais l'hors de l'execution...
#if MOBILE
[MTAThreadAttribute]
#else
[STAThreadAttribute]
#endif
Avatar
Gilles TOURREAU
Le Tue, 20 Nov 2007 18:50:09 +0100, MatthieuB a écrit:

Vous n'avez pas le choix de toute façon que d'avoir un executable pour
Windows classique et un autre pour Windows CE...
L'un ne pouvant pas s'executer chez l'autre et inversement !




Si justement c'est l'avantage du Framework .NET.



Je me suis planté dans mon explication c'est vrai qu'une application
compact framework peut s'executer sur un pc mais pas le contraire...


Toute mon application qui tourne actuellement sous Smartphone,
fonctionne aussi sur PDA et sous Windows...
A l'exception du WebBrowser. Qui pose un probleme de Thread STA.

Mais je suis sure qu'il est possible d'Exécuter du code générer à la
volet en fonction de la plateforme.
c'est à dire: faire un équivalent de ceci mais l'hors de l'execution...
#if MOBILE
[MTAThreadAttribute]
#else
[STAThreadAttribute]
#endif




Le compact ne prend pas en charge à la base l'execution cloisonné STA. Il
n'existera donc aucune méthode pour changer cet état sous le compact...
La solution de 2 executables doit donc être utilisé...

Cordialement

--
Gilles TOURREAU


S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Avatar
MatthieuB
"Gilles TOURREAU" a écrit dans le message de
news:
Le Tue, 20 Nov 2007 18:50:09 +0100, MatthieuB a écrit:

Vous n'avez pas le choix de toute façon que d'avoir un executable pour
Windows classique et un autre pour Windows CE...
L'un ne pouvant pas s'executer chez l'autre et inversement !




Si justement c'est l'avantage du Framework .NET.



Je me suis planté dans mon explication c'est vrai qu'une application
compact framework peut s'executer sur un pc mais pas le contraire...


Toute mon application qui tourne actuellement sous Smartphone,
fonctionne aussi sur PDA et sous Windows...
A l'exception du WebBrowser. Qui pose un probleme de Thread STA.

Mais je suis sure qu'il est possible d'Exécuter du code générer à la
volet en fonction de la plateforme.
c'est à dire: faire un équivalent de ceci mais l'hors de l'execution...
#if MOBILE
[MTAThreadAttribute]
#else
[STAThreadAttribute]
#endif




Le compact ne prend pas en charge à la base l'execution cloisonné STA. Il
n'existera donc aucune méthode pour changer cet état sous le compact...
La solution de 2 executables doit donc être utilisé...

Cordialement

--
Gilles TOURREAU


S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr



Existe-t-il un équivalent au composant WebBrowser qui fonctionne autant sous
CF2.0 que sous le Framework Classique ?
Sachant qu'il fonctionne bien sous les deux plateformes quand on le compile
pour...
Avatar
OD
> Existe-t-il un équivalent au composant WebBrowser qui fonctionne autant sous
CF2.0 que sous le Framework Classique ?
Sachant qu'il fonctionne bien sous les deux plateformes quand on le compile
pour...



A partir du moment où tu dois faire deux exe pour le modèle de
threading, tu peux utiliser dans chacun le compo webbrowser qui va bien
non ?

--


OD___
www.e-naxos.com