I'm a C# novice and hoping someone can help me. I have two devices that act as either a client-server or server-client pair. It depends upon who is performing HTTP POSTs to the other device. I'm implementing HTTP POST code for when the device is acting as a client. I'm also implementing HTTPListener code for when the device is acting as the server.

I'd like the HTTPListener to run concurrently with the HTTP POST code while it is making periodic POSTs. I'm not sure how the
HTTPListener listens for incoming POSTs. It appears to make the program wait until a preferred URI is recognized. It then appears
to accept the other device's request and POST data.

Should I put the HTTPListener within and event handler that is triggered anytime during program execution? I believe this would
pause the current program execution inorder to execute the HTTPListener code. After the listener code is completed, the program
should resume where it intially left off. Do I understand this correctly?

Below is some of my code simplified to illustrate. I hope it's fairly clear. Thank you for assistance with HTTP and event concepts anyone can share.

Code:
// this is my primary class from which all program execution is to be controlled from
			public class Lru_operation
			{
				#region fields
				// contains field members used within LruOperation()
				#endregion fields

				#region Properties

				public Lru_Listen LruListen = new Lru_Listen();		// create Lru_Listen object for accessing another class method(s)
				public Lru_Post HttpLruPost = new Lru_Post();		// same purpose as above
				
				#endregion Properties

				[STAThread]
				static void Main()
				{
					Lru_operation LruOpX = new Lru_operation();		// create a Lru_operation object 	
					LruOpX.LruOperation();					// call to LruOperation()
				}

				public void LruOperation()
				{
					LruListen.ListenForAag();	// calls a method from the Lru_Listen class that starts the HTTPListener 

					try
					{
						while(true)
						{
							// performs further code tasks with methods, etc. from other source files
													
							HttpLruPost.LruHttpPost(AagLocation, ChanDet.DropSondeData);  // performs the HTTP POSTs to the other device

							// more tasks

							//IMPORTANT***Should I remove the below code and encapsulate the below method within an event handler?
							LruListen.LruListenAccReq();	// performs the tasks of accessing the other devices webRequest and POST data 
						}
					}
					catch(Exception ex)
					{
						// performs other tasks
					}
				}
			}



			// this class handles listening for incoming HTTP POSTs from the other device
			public class Lru_Listen
			{
				// this method identifies the preferred URI to listen for and starts the listener
				public void ListenForAag()
				{
					string prefix = "http://cgi-gin/setFreq/";						
 
					if (!HttpListener.IsSupported)							
					{
						//throw Exception;
				}

				if(prefix == null || prefix.Length == 0)				
				{
					//throw new argumentException("prefix");
				}

				listener = new HttpListener();				
				listener.Prefixes.Add(prefix);									

				listener.Start();										
			

				// this method handles the access of the other device's HTTP POST msg and responds back
				public void LruListenAccReq()
				{
					// synchronous: Getcontext method blocks other requests while waiting for an Aag POST cmd msg request

					HttpListenerContext context = listener.GetContext();	
					HttpListenerRequest request = context.Request;		

					LruShowRequestData(request);		// reads the other devices POST'ed data

					// responds back to other device
				}
			}

			// this class handles this device's HTTP POSTs to the other device and receives the response
			public class Lru_Post
			{
				// this method handles the request and sending of POST data to the other device
				public string LruHttpPost(string AagMsgLocation, string dropSondeMsg)		
				{	
					WebRequest webRequest = WebRequest.Create(AagMsgLocation);		
					webRequest.ContentType = "application/x-www-form-urlencoded";	
					webRequest.Method = "POST";										
			
					byte[] bytes = Encoding.ASCII.GetBytes (dropSondeMsg);			
					Stream dataStream = null;										

					webRequest.ContentLength = bytes.Length;					
					dataStream = webRequest.GetRequestStream();				
					dataStream.Write(bytes, 0, bytes.Length);			
					dataStream.Close();

					// get the response from the other device											
				}
			}