Thread et PortSerie

Signaler
Messages postés
46
Date d'inscription
mardi 17 décembre 2002
Statut
Membre
Dernière intervention
13 décembre 2007
-
Messages postés
46
Date d'inscription
mardi 17 décembre 2002
Statut
Membre
Dernière intervention
13 décembre 2007
-
Bonjours, j'aimerai etre un peu éclairé par ce probleme, je m'explique j'ai une connection en port serie de PC a Pocket PC l'ors de l'envoi d'information sur le PocketPC j'ai une erreur comme ceci :

<hr size= "2" width="100%" />Control.Invoke doit être utilisé pour permettre l'interaction avec des contrôles créés dans un autre thread.

<hr size="2" width="100%" />
ceci ce produisé aussi qunad je fesait du PocketPC au PC mais j'ai reussi a la contourné via une fonction "BarBar"

<hr size="2" width="100%" />
 Control.CheckForIllegalCrossThreadCalls = False
<hr size ="2" width= "100%" />

Mais je ne peut l'utilisé cette fonction sous le mobile... Merci d'avance pour votre aide,

PS : Juste la partie du de reception de donné sur le PocketPC :
<hr size="2" width="100%" />
    Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
        System.Threading.Thread.CurrentThread.Name = 1
        txtReception.Text = SerialPort1.ReadLine
    End Sub
<hr size="2" width="100%" />

9 réponses

Messages postés
258
Date d'inscription
mercredi 21 avril 2004
Statut
Membre
Dernière intervention
27 octobre 2010
4
salut
pourquoi n'utilises tu pas ActiveSync pour gérer tes communications entre le PC et le Pocket PC ?

Pat

 Don't Worry , Be Happy
Messages postés
46
Date d'inscription
mardi 17 décembre 2002
Statut
Membre
Dernière intervention
13 décembre 2007

Car je shouaiterai faire une application independante de Microsoft ActiveSync, Remarque tu pourrait me donné plus d'info sur la communication entre ActiveSync et le PocketPC ? sa peut m'etre toujours utile un jours
Messages postés
258
Date d'inscription
mercredi 21 avril 2004
Statut
Membre
Dernière intervention
27 octobre 2010
4
oui, moi aussi, je voulais faire cela mais le probleme c'est que pour gérer un périph connecté sur USB ou Réseau, tu fais comment ? perso je n'ai pas trouvé... je n'ai peut etre pas bien cherché. Bref, pour des soucis de délais de réalisation, je me suis retranché sur ActiveSync.

donc, j'ai utilisé les fonctions de la dll RAPI. ci dessous les déclarations des api utilisées.

[

StructLayout(
LayoutKind.Explicit)]

struct
RAPIINIT{

[

FieldOffset(0)]

public
int cbSize;[

FieldOffset(4)]

public
IntPtr heRapiInit;[

FieldOffset(8)]

public
int hrRapiInit;};

[

StructLayout(
LayoutKind.Sequential, CharSet =
CharSet.Unicode)]

struct
CE_FIND_DATA{

public
int dwFileAttributes;

public
int ftCreationTime_LowDateTime;

public
int ftCreationTime_HighDateTime;

public
int ftLastAccessTime_LowDateTime;

public
int ftLastAccessTime_HighDateTime;

public
int ftLastWriteTime_LowDateTime;

public
int ftLastWriteTime_HighDateTime;

public
int nFileSizeHigh;

public
int nFileSizeLow;

public
int dwReserved0;[

MarshalAs(
UnmanagedType.ByValTStr, SizeConst = 260)]

public
string cFileName;};

[

DllImport("kernel32.dll", SetLastError true, ExactSpelling
true)]

private
static
extern
Int32 WaitForSingleObject (
IntPtr hHandle,
Int32 dwMilliseconds);

[

DllImport(
"rapi.dll", SetLastError =
true)]

private
static
extern
int CeRapiInitEx (
ref
RAPIINIT pRapiInit);[

DllImport(
"rapi.dll", SetLastError =
true)]

private
static
extern
int CeRapiUninit();[

DllImport(
"rapi.dll", SetLastError =
true,CharSet=
CharSet.Unicode)]

private
static
extern
int CeFindFirstFile(
string lpFileName,
ref
CE_FIND_DATA lpFindFileData);[

DllImport("rapi.dll", SetLastError true, CharSet
CharSet.Unicode)]

private
static
extern
int CeFindNextFile(
int handle,
ref
CE_FIND_DATA lpFindFileData);[

DllImport(
"rapi.dll")]

private
static
extern
bool CeFindClose(
int handle);[

DllImport("rapi.dll", SetLastError true, CharSet
CharSet.Unicode)]

private
static
extern
int CeCopyFile(
string lpExistingFileName,
string lpNewFileName,
bool bFailIfExists);[

DllImport(
"rapi.dll", SetLastError =
true, CharSet=
CharSet.Unicode)]

private
static
extern
bool CeDeleteFile(
string lpFileName);[

DllImport(
"rapi.dll", SetLastError =
true)]

private
static
extern
int CeRapiGetError();[

DllImport(
"rapi.dll", SetLastError =
true)]

private
static
extern
int CeGetLastError();[

DllImport(
"rapi.dll", CharSet=
CharSet.Unicode)]

private
static
extern
int CeCreateFile(

string lpFileName,

uint dwDesiredAccess,

int dwShareMode,

int lpSecurityAttributes,

int dwCreationDisposition,

int dwFlagsAndAttributes,

int hTemplateFile);[

DllImport(
"rapi.dll", CharSet =
CharSet.Unicode)]

private
static
extern
int CeReadFile(

int hFile,

byte[] lpBuffer,

int nNumberOfbytesToRead,

out
int lpNumberOfbytesRead,

int lpOverlapped);[

DllImport(
"rapi.dll")]

private
static
extern
uint CeGetFileSize(
int hFile,
ref
uint lpFileSizeHigh);[

DllImport(
"rapi.dll")]

private
static
extern
int CeCloseHandle(
int hFile);[

DllImport(
"rapi.dll", CharSet =
CharSet.Unicode)]

private
static
extern
uint CeRegOpenKeyEx(

uint HKEY,

string lpSubKey,

int ulOptions,

uint samDesired,

out
uint phkResult);[

DllImport(
"rapi.dll", CharSet =
CharSet.Unicode)]

private
static
extern
int CeRegCreateKeyEx(

uint hKey,

string lpKeyName,

int lpReserved,

string dwType,

int dwOptions,

int samDesired,

int lpSecurityAttributes,

out
uint phkResult,

out
uint lpdwDisposition);[

DllImport(
"rapi.dll", CharSet =
CharSet.Unicode)]

private
static
extern
int CeRegSetValueEx(

uint hKey,

string lpValueName,

int lpReserved,

int dwType,

byte[] lpData,

int cbData); 

[

DllImport(
"rapi.dll", CharSet =
CharSet.Unicode)]

private
static
extern
uint CeRegQueryValueEx(

uint hKey,

string lpValueName,

int lpReserved,

ref
int lpType,

byte[] lpData,

ref
int lpchData); 

[

DllImport(
"rapi.dll")]

private
static
extern
int CeRegCloseKey(
uint hkey);

Pat

 Don't Worry , Be Happy
Messages postés
403
Date d'inscription
mercredi 19 avril 2006
Statut
Membre
Dernière intervention
7 août 2020
1
Bonjour,

La récupération des données de SerialPort ne se déroule pas sur le même thread que le form, donc il n'est pas possible d'envoyer les infos en "direct". Il faut passer par un délégué qui le fera pour nous.

Petit exemple sur cette source.Bonne Prog
Messages postés
46
Date d'inscription
mardi 17 décembre 2002
Statut
Membre
Dernière intervention
13 décembre 2007

Merci pour l'information sur la connection avec Microsoft ActiveSync grace a la DLL RAPI; justement moi pour le transfere de donnée je l'effectue via bluetooth, j'ouvre un port com sur le PC et sur le PocketPC, puis je l'ai fait dialogué :

<hr size= "2" width="100%" />

'Partie pour que le PC recoi l'information du PocketPC

         SerialPort1.PortName = "Com4"
        SerialPort1.BaudRate = 9600
        SerialPort1.DataBits = 8
        SerialPort1.Open()

    Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
        Control.CheckForIllegalCrossThreadCalls = False
        txtReception.Text = SerialPort1.ReadLine
    End Sub

'Partie pour que PocketPC envoi l'information au PC

  SerialPort1.PortName = "Com7"
        SerialPort1.BaudRate = 9600
        SerialPort1.DataBits = 8
        SerialPort1.Open()

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
        SerialPort1.WriteLine("Envoi De Donnée")
    End Sub

<hr size="2" width="100%" />ATTENTION : Ne pas utilisé l'émulateur car il ne gere pas ce protocol faire les teste directement sur son PocketPC
Messages postés
46
Date d'inscription
mardi 17 décembre 2002
Statut
Membre
Dernière intervention
13 décembre 2007

Merci [auteur/LESDIS/751545.aspx lesdis] pour ton information, mais, je l'avait deja explorer pour justement essaye de résoudre mon probleme mais cela n'as rien fait...) enfaite Invoke n'est pas disponible pour le PocketPC aurais tu sinon une autre methode ?
Messages postés
403
Date d'inscription
mercredi 19 avril 2006
Statut
Membre
Dernière intervention
7 août 2020
1
Ha....

Je n'ai jamais programmer pour pocket PC, mais je vais essayer d'y jeter un coup d'oeil. Je te tiens au courant si je trouve quelque chose ^^

Bonne Prog
Messages postés
492
Date d'inscription
jeudi 5 avril 2007
Statut
Membre
Dernière intervention
2 juillet 2012
2
Bonsoir à tous,


Je ne connais pas .Net, mais si je devai réaliser une tel  application en VB6 j'employerais un ActiveX.EXE qui lui peu gérer le multiThred. Je suppose que cà existe aussi en VB.2005 ?
Excusez-moi si je suis à côté de la plaque !.
A+
Messages postés
46
Date d'inscription
mardi 17 décembre 2002
Statut
Membre
Dernière intervention
13 décembre 2007

Enfet sous VisualBasic.Net il y a une fonction deja inclue sauf je ne sait pas l'utilisé :s et je n'y arrive pas puis c'est toujours mieu que d'avoir reccour aux ActiveX, OCX...