How to handle two serialReceiveevents on different COM port

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?
cmdolcetAsked:
Who is Participating?

Improve company productivity with a Business Account.Sign Up

x
 
cmdolcetConnect With a Mentor Author Commented:
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
 
AndyAinscowFreelance programmer / ConsultantCommented:
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
 
cmdolcetAuthor Commented:
I am only guessing they are colliding because it stalled my program
0
Get your problem seen by more experts

Be seen. Boost your question’s priority for more expert views and faster solutions

 
AndyAinscowFreelance programmer / ConsultantCommented:
If it is the root of your problem then you probably need to have the receive events in different threads.
0
 
cmdolcetAuthor Commented:
How do I do a receive event in a new thread?
0
 
AndyAinscowFreelance programmer / ConsultantCommented:
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
 
cmdolcetAuthor Commented:
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
 
cmdolcetAuthor Commented:
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
 
AndyAinscowFreelance programmer / ConsultantCommented:
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
 
cmdolcetAuthor Commented:
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
 
AndyAinscowFreelance programmer / ConsultantCommented:
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
 
cmdolcetAuthor Commented:
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
 
AndyAinscowFreelance programmer / ConsultantCommented:
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
 
cmdolcetAuthor Commented:
I was able to solve the solution myself
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.