Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 3346150
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 18, 20262026-05-18T01:16:11+00:00 2026-05-18T01:16:11+00:00

I have the following method within my TcpServer private void Receive(ZClient client) { NetworkStream

  • 0

I have the following method within my TcpServer

    private void Receive(ZClient client)
    {
        NetworkStream ns = client.TcpClient.GetStream();
        int bytesRead = 0;
        byte[] message = new byte[client.TcpClient.ReceiveBufferSize];
        while (true)
        {
            bytesRead = ns.Read(message, 0, client.TcpClient.ReceiveBufferSize);
            if (bytesRead == 0)
            {
                break;  // Exit Thread
            }
            else
            {
                Array.Resize<Byte>(ref client.Buffer, client.Buffer.Length + bytesRead);
                Buffer.BlockCopy(message, 0, client.Buffer, client.Buffer.Length - bytesRead, bytesRead);
                // Issue Below
                DisassembleRawMessage(client); // *1 See below
                new Thread(()=>DeQueueMessages(client)).Start();  // *2 See below
                // End Issue
            }
        }
    }
  1. DissassembleRawMessage is responsible for handling the processing of my buffer and enquing individual messages in my client message queue. No problem here.

  2. DeQueueMessages is responsible for processing the objects previously placed into my client message queue within the DissassembleRawMessage method.

The problem may seem pretty obvious. I spin off a new thread after the message is recieved. During the process of dequing and processing the individual messages, the queue may have more items added to it, as more data may have been recieved in the interm. This results in an enumeration error, prompting me that I may not modify the contents of the collection during the enumeration.

I don’t want to block my recieve method by processing the queue within the same thread, as it would defeat the purpose allowing the queue to build up requests, while still recieving data. How can I continue to queue objects, and at the same time, process the objects within the queue without running into enumeration modification exceptions?

Update: The method that dequeues the messages.

while (client.Queue.Count() > 0)
{
   byte[] buffer = client.Queue.Dequeue();
   ...
}
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-18T01:16:11+00:00Added an answer on May 18, 2026 at 1:16 am

    First, I wouldn’t use a new thread for each message received. Either start a thread that waits for new work rather than exiting, or use the ThreadPool.

    If you’re getting an InvalidOperationException during enumeration, that means you’re iterating over a list or other IEnumerable. Does that mean that you’re doing something like this?

    void DeQueueMessages(ZClient client)
    {
        foreach(Message m in client.messageList)
        {
            ...
        }
        messageList.Clear();
    }
    

    If so, switch to using the actual Queue class, and do this while loop:

    void DeQueueMessages(ZClient client)
    {
        while(client.messageQueue.Count > 0)
        {
            Message m = client.messageQueue.Dequeue();
            ...
        }
    }
    

    If memory serves, the standard System.Collections.Generic.Queue class isn’t thread safe, so I’d go with System.Collections.Concurrent.ConcurrentQueue.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have the following C++ method : __declspec(dllexport) void __stdcall getDoubles(int *count, double **values);
I have the following method in my code: private bool GenerateZipFile(List<FileInfo> filesToArchive, DateTime archiveDate)
Say we have the following method: private MyObject foo = new MyObject(); // and
I have the following serialization method: Private Function SerializeData(ByVal data As cData) As String
I have something similar to the following method: public ActionResult Details(int id) { var
Let's say we have the following method declaration: Public Function MyMethod(ByVal param1 As Integer,
I'm converting an application to use Java 1.5 and have found the following method:
I have a partial that renders a select box using the following method: <%=
I have the following code which works just fine when the method is POST,
I have the following class: public abstract class AbstractParent { static String method() {

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.