STA Thread sur Compact Framework 2.0

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Gilles TOURREAU
Le #12163761
Le Sun, 18 Nov 2007 18:01:48 +0100, 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



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
MatthieuB
Le #12134861
> 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...
Gilles TOURREAU
Le #12134851
Le Tue, 20 Nov 2007 17:32:13 +0100, 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...



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
MatthieuB
Le #12134841
"Gilles TOURREAU" news:
Le Tue, 20 Nov 2007 17:32:13 +0100, 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...



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...
Gilles TOURREAU
Le #12134821
Le Tue, 20 Nov 2007 18:20:51 +0100, MatthieuB

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
MatthieuB
Le #12134801
> 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
Gilles TOURREAU
Le #12134791
Le Tue, 20 Nov 2007 18:50:09 +0100, 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.



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
MatthieuB
Le #12134781
"Gilles TOURREAU" news:
Le Tue, 20 Nov 2007 18:50:09 +0100, 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.



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...
OD
Le #12134041
> 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
Publicité
Poster une réponse
Anonyme