Question

Je suis en train d'utiliser des méthodes de .Net SerialPort d'un autre programme qui utilise le moteur Unity3D.

J'ai une bibliothèque de classes C # (dll) qui registre et mettent en place une fonction de rappel lorsque le port série reçoit des données.

public CSerialDll()
{         
   _serial.DataReceived += new SerialDataReceivedEventHandler(serial_DataReceived);
}

void serial_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
   int bytes = _serial.BytesToRead;
   _comBuffer = new byte[bytes];
   _serial.Read(_comBuffer, 0, bytes);
   Console.WriteLine("data recv: " + System.Text.ASCIIEncoding.ASCII.GetString(_comBuffer));
}

Et puis dans mon autre programme, je crée une instance de la classe.

Je veux savoir si mon dos d'appel serial_DataReceived dans la bibliothèque (dll) sera appelé ou non. Je suis en train de lire _comBuffer dans la bibliothèque d'un autre programme et toujours vide (même si les données arrivent quand je l'ai testé avec une application de la console dans la même application).

Toute aide est grandement appréciée.

Merci

Était-ce utile?

La solution

<HUNCH>

Si j'étais un concepteur de classe, je mettrais les données dans la fonction de rappel, donc si vous regardez la classe SerialDataReceivedEventArgs, vous verrez que l'intérieur est vous tampon avec les données.

Alors, après que vous obtenez un événement, et vous appelez ensuite lu, vous défaussez réellement les données qui sont envoyées à vous et demande plus.

En d'autres termes, oui, le fait qu'il est une bibliothèque externe n'a rien à voir avec le fait qu'il ne fonctionne pas comme il se doit.

</HUNCH>

Autres conseils

Il n'y a généralement rien de particulièrement spécial sur les méthodes étant dans une DLL séparée, tant que modificateurs d'accès sont correctement.

Cependant, selon la façon dont vous configurez votre solution, il peut être une douleur en vous assurant d'avoir la dernière DLL dans le dossier bin.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top