Exemple : Configuration du protocole en mode événement

Exemple d’un NetLogic contenu dans l’objet
Port
série qui utilise le mode d’événement pour lire les données de manière asynchrone à partir d’un dispositif. La méthode
OnClick
, liée à l’événement du clic sur le bouton, vous permet d’arrêter la lecture en cours et d’en démarrer une nouvelle.
Pour utiliser le mode événement, vous devez définir la propriété
Timeout
sur
0
. De cette façon,
ReadBytes
assurera le blocage tant que les données demandées n’arrivent pas sur le port série.
Vous pouvez arrêter la lecture avec la méthode
CancelRead
ou la méthode
Close
. Dans les deux cas, une exception
ReadCanceledException
est générée. Pour fermer correctement le NetLogic, vous devez terminer toutes les opérations de lecture en attente en appelant la méthode
Close
dans le NetLogic
Stop
.
Vous pouvez télécharger un exemple de projet depuis SerialPortDemoEventMode.zip.
public class RuntimeNetlogic1 : BaseNetLogic { private SerialPort serialPort; private LongRunningTask task; public override void Start() { serialPort = (SerialPort)Owner; serialPort.Timeout = TimeSpan.FromMilliseconds(0.0); task = new LongRunningTask(Run, Owner); task.Start(); } [ExportMethod] public void OnClick() { // Cancel current read serialPort.CancelRead(); task.Cancel(); // Start new read task = new LongRunningTask(Run, Owner); task.Start(); } private void Run() { while(!task.IsCancellationRequested) { try { // Block until 3 bytes arrive on serial var result = serialPort.ReadBytes(3); foreach (var b in result) Log.Info(String.Format("0x{0:x2}", b)); } catch (ReadCanceledException ex) { // In case of read canceled, exit from the loop Log.Info(ex.Message); return; } catch (Exception e) { Log.Error(e.Message); } } } public override void Stop() { // Explicit call to Close to cancel pending read (if any) serialPort.Close(); task.Cancel(); } }
Fournir une réponse
Vous avez des questions ou des commentaires sur cette documentation ? Veuillez envoyer vos commentaires ici.