Solved

How to handle two serialReceiveevents on different COM port

Posted on 2014-01-16
14
156 Views
Last Modified: 2014-03-17
OK, I have two separate  serialdataReceiveEvents on two different COM port that may be firing off at the same time. One SerialDataReceiveEvent is called in the form class the other SerialReceiveDataEvent is called in a different class (not a form class) the problem iI am having and im thinking that they are colliding. Is there any way to avoid this?
0
Comment
Question by:cmdolcet
  • 8
  • 6
14 Comments
 
LVL 44

Expert Comment

by:AndyAinscow
ID: 39787975
Why should they collide?
Isn't one class linked to one of the two ports and the other class linked to the other port ?
0
 

Author Comment

by:cmdolcet
ID: 39788360
I am only guessing they are colliding because it stalled my program
0
 
LVL 44

Expert Comment

by:AndyAinscow
ID: 39788396
If it is the root of your problem then you probably need to have the receive events in different threads.
0
Microsoft Certification Exam 74-409

Veeam® is happy to provide the Microsoft community with a study guide prepared by MVP and MCT, Orin Thomas. This guide will take you through each of the exam objectives, helping you to prepare for and pass the examination.

 

Author Comment

by:cmdolcet
ID: 39803212
How do I do a receive event in a new thread?
0
 
LVL 44

Expert Comment

by:AndyAinscow
ID: 39803438
Your main app is in reality a thread.
So you currently do receive the event within a thread.
One object is in one thread, the other object is in the other thread.
0
 

Author Comment

by:cmdolcet
ID: 39833395
OK, It seems that I get an error in my program when inside the frmRutnime_Formclosing event. Its not actually an error the program just does not respond and I need to force a close with a Cltr+alt+Delete.

I just need a better way of handling this issue.
0
 

Author Comment

by:cmdolcet
ID: 39841803
OK, after further investigation, both DataReceivedHandlers are there own SerialDataReceivedEvent and there is a possibility that they can be both fired at the same time. One SerialData ReceiveEvent is an event in the form that monitors the serial port of an incoming signal. The other SerialDataReceiveEvent monitors a completely seperate serial port signal on the class side. What I need is that if the event handler that monitor the serialport on the form is triggered it will take prescience  and not go into the second serialdataeventhandler.
0
 
LVL 44

Expert Comment

by:AndyAinscow
ID: 39841900
I don't quite understand your previous comment.
Are you saying my first comment was correct - one class responds only to one port, the other class responds only to the other port (= your guess about a collision was incorrect) ?
Or are you saying both classes respond when one serial port receives a signal ?
0
 

Author Comment

by:cmdolcet
ID: 39842022
Well one DatareceivedEnvent in on the form event and the other DataReceived event is in a class that monitors a different COM port. I have an attached file that outlines both DataReceivedEvents (see attaches). What I did was on the first DataReceivedEvent i placed a variable for COM1 that if it is called at the same time it will throw a flag, if that flag is trow it will get out of the DataReceivedEvents.

Im not sure if there is a better way.
Example-Code.txt
0
 
LVL 44

Expert Comment

by:AndyAinscow
ID: 39842411
I'm still puzzled - when an event is raised on one port do you see activity from BOTH handlers.  It should be easy to test by writing something to a log.
0
 

Author Comment

by:cmdolcet
ID: 39842559
Events are being raised on two separate COM ports. ( one event is on COM 1 and the other is on COM 6) The problem is that it is possible that both COM ports get events on them relatively at the same time. The problem is that if COM 6 gets its event first then it throws the program into a crazy endless loop that I can find my issue. If COM 1 gets its event first then everything works well. If you notice on the frmRuntime the event handler I have boolean COM flags set to if COM 1 is first  and COM6 follow a flag is set in the event handler COM 6 that restricts it from carrying on in its method.

I hope that helps.
0
 
LVL 44

Expert Comment

by:AndyAinscow
ID: 39843783
Then you should use a separate thread for handling the work being done on receiving the COM6 event.  That will leave the main thread available for working with COM1 events.
Eg. use a BackgroundWorker:
http://msdn.microsoft.com/en-us/library/System.ComponentModel.BackgroundWorker%28v=vs.110%29.aspx

You can still trap the event as you do at present, just move the processing code into the BackgroundWorker (see DoWork method)
0
 

Accepted Solution

by:
cmdolcet earned 0 total points
ID: 39854223
What I was able to do is set a couple of Boolean flags that determine if I am in the thread of not. COM1 will take precedence and COM2 will follow. If both threads are called and COM 2 is entered it will check for the Boolean flag being set, if not flag then it will continue to execute.
0
 

Author Closing Comment

by:cmdolcet
ID: 39933714
I was able to solve the solution myself
0

Featured Post

Enterprise Mobility and BYOD For Dummies

Like “For Dummies” books, you can read this in whatever order you choose and learn about mobility and BYOD; and how to put a competitive mobile infrastructure in place. Developed for SMBs and large enterprises alike, you will find helpful use cases, planning, and implementation.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Parsing a CSV file is a task that we are confronted with regularly, and although there are a vast number of means to do this, as a newbie, the field can be confusing and the tools can seem complex. A simple solution to parsing a customized CSV fi…
The ECB site provides FX rates for major currencies since its inception in 1999 in the form of an XML feed. The files have the following format (reducted for brevity) (CODE) There are three files available HERE (http://www.ecb.europa.eu/stats/exch…
This Micro Tutorial hows how you can integrate  Mac OSX to a Windows Active Directory Domain. Apple has made it easy to allow users to bind their macs to a windows domain with relative ease. The following video show how to bind OSX Mavericks to …
This Micro Tutorial demonstrates using Microsoft Excel pivot tables, how to reverse engineer competitors' marketing strategies through backlinks.

772 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question