OVH Cloud OVH Cloud

TRES GRAND BESOIN DE VOTRE AIDE RAPIDE !!!

1 réponse
Avatar
Bruno Remeyse
Bonjour,

J'ai besoin très très rapidement d'un aide charitable car je n'arrive pas à
me sortit de ce sac et je suis tenu par le temps pour ce projet.

Je dois a partir d'un projet WebApplication (c#) gerer le port serie de mon
ordi.
J'ai écrit l'appli béta dans un projet WindowsApplication en me servant de
MsComm32.ocx. Aucun problème.
J'ai créé l'application WebApplication, déclarées les références
nécessaires(AxMsCommLib, MsCommLib et System.Windows.Form).
Lorsque j'intègre le controle dans la page aspx, aucune erreur mais pas de
reconnaissance dans le panneau propriété du controle.
Je déclare une variable "private AxMsCommLib.AxMsComm flux;" : elle est
reconnue.
Mais si je l'instancie : "new AxMsCommLib.AxMsComm()" alors j'ai droit à
l'insulte ci après :

Could not instantiate ActiveX control '648a5600-2c6e-101b-82b6-000000000014'
because the current thread is not in a single-threaded apartment.

J'ai positionné le flag [STAThread] avant la proc page_load(..)
J'ai déclaré une methode qui lance une autre page
("Response.Redirect("WebForm2.aspx")) et je lance cette methode a partir
d'un thread déclaré "AppartmentState.STA" : Même erreur.
J'ai modifier global.asax de manière a lance "InitializeComponent" a partir
d'un thread STA... même erreur...

QUELQU'UN PEUT-IL ME SORTIR DE CE SAC de NOEUDS ??????? JE LUI TRANSMET
ILLICO UN CARTON DE BON VIN !!!

Bruno

1 réponse

Avatar
si j'ai bien compris tes explications, a mon avis ton
thread courant est toujours celui d'ASP qui lui est MTA
et non pas STA. Je ne pense vraiment pas qu'ASP puisse
tourner en STA d'ailleurs.
D'ailleurs tu peux vérifier en testant la propriété
ApartmentState du thread courant et voir ce qu'il y a.

Ce que je ferai c'est de créer un thread avec sa
propriété ApartmentState à ApartmentState.STA. Tu écris
une procédure qui se charge de communiquer avec ton
composant COM et tu lances le thread dessus en mode
SYNCHRONE. Ensuite tu laisses le code ASP vivre sa vie
comme d'hab.


Il existe différentes techniques pour faire cela, mais ça
dépend de ce que tu veux faire exactement (paramètres
entrées/retour en partivulier, le mieux est de rechercher
un tutoriel. Sinon reposte à nouveau la dessus.

Frédo


-----Original Message-----
Bonjour,

J'ai besoin très très rapidement d'un aide charitable


car je n'arrive pas à
me sortit de ce sac et je suis tenu par le temps pour


ce projet.

Je dois a partir d'un projet WebApplication (c#) gerer


le port serie de mon
ordi.
J'ai écrit l'appli béta dans un projet


WindowsApplication en me servant de
MsComm32.ocx. Aucun problème.
J'ai créé l'application WebApplication, déclarées les


références
nécessaires(AxMsCommLib, MsCommLib et


System.Windows.Form).
Lorsque j'intègre le controle dans la page aspx, aucune


erreur mais pas de
reconnaissance dans le panneau propriété du controle.
Je déclare une variable "private AxMsCommLib.AxMsComm


flux;" : elle est
reconnue.
Mais si je l'instancie : "new AxMsCommLib.AxMsComm()"


alors j'ai droit à
l'insulte ci après :

Could not instantiate ActiveX control '648a5600-2c6e-


101b-82b6-000000000014'
because the current thread is not in a single-threaded


apartment.

J'ai positionné le flag [STAThread] avant la proc


page_load(..)
J'ai déclaré une methode qui lance une autre page
("Response.Redirect("WebForm2.aspx")) et je lance cette


methode a partir
d'un thread déclaré "AppartmentState.STA" : Même erreur.
J'ai modifier global.asax de manière a


lance "InitializeComponent" a partir
d'un thread STA... même erreur...

QUELQU'UN PEUT-IL ME SORTIR DE CE SAC de NOEUDS ???????


JE LUI TRANSMET
ILLICO UN CARTON DE BON VIN !!!

Bruno


.