Je travaille dans un thread pour vérifier la connexion GPRS dans CompactFramework
.serialPort.DataReceived en cours d'exécution dans le thread ne fonctionne pas
L'idée du fil est simple: Si le programme n'est pas connecté, alors je cours le code pour se connecter (ce code me donne des erreurs), mais si la connexion est OK alors je revérifie dans 60 secondes et ainsi sur.
Maintenant, en mettant l'accent sur le code de connexion. Le code suivant vérifie s'il est connecté ou non, si ce n'est pas le cas, je m'abonne à l'événement DataReceive
.
void initFormText()
{
if (isThereConnect()) //true if it is connected
{
//enable timer to recheck if it's connected
}
else //it isn't connected
{
serialPort1.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(serialPort1_DataReceived);
if (serialPort1.IsOpen)
{
serialPort1.Close();
}
serialPort1.Open();
timerStep.Enabled = true;
}
}
Maintenant vient la question, dans le serialPort1_DataReceived je vérifie les données et définir une variable qui est testée par le timerStep et faire quelques pas.
Le problème se produit en cas DataReceived, la chose est que quand je lance le code suivant à l'extérieur d'un fil, il fonctionne très bien, il fait tout le travail et faire le lien, mais dans le fil il doesn ne fonctionne pas. Je l'ai testé en ajoutant quelques MessageBox
et je me rends compte que ceux qui se trouvent dans le DataReceive n'apparaissent jamais.
void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
byte[] data = new byte[1024];
int n = serialPort1.Read(data, 0, data.Length);
string rec = Encoding.GetEncoding("windows-1252").GetString(data, 0, n);
if (string.IsNullOrEmpty(rec))
{
return;
}
if (rec.Contains("AT+CIMI") && rec.Contains("OK"))
{
MessageBox.Show("serialPort 1");
currState = 1;
}
else if (rec.Contains("READY"))
{
MessageBox.Show("serialPort 11");
currState = 1;
}
else if (rec.Contains("0,1") || rec.Contains("0,5"))
{
MessageBox.Show("serialPort 2");
currState = 2;
}
}
Donc, pour une raison quelconque, serialPort ne reçoit rien et je n'arrive pas à comprendre pourquoi. Le fait que cela fonctionne en dehors du fil mais pas dans le fil me frustrent.
J'apprécie toute aide. Merci d'avance!
Merci l'homme !!! avec Application.Run fonctionne très bien! Merci beaucoup pour votre aide! –