Mark McLaughlin

Mark McLaughlin

  • NA
  • 1
  • 2.4k

C# thread parameters - parameter changes

Aug 5 2010 2:42 PM

So I have a method that gets a Dictionary of List<myObj>, then cycles through the keys of the dictionary and passes each List<myObj> to a separate thread.

Here is some Code / Psuedo-Code:

    public static void ProcessEntries() {

        Dictionary<string, List<myObj>> myDictionary = GetDictionary();

        foreach(string key in myDictionary.keys)
        {

            List<myObj> myList = myDictionary[key];

            Thread myThread = new System.Threading.Thread(new System.Threading.ThreadStart(delegate() {

                ProcessList(myList);
       
            }    
        }
    }

    public static void ProcessList(List<myObj> myList) {

        // Process entries
        // read-only operations on myList

    }


The problem is that during execution of ProcessList the myList parameter simply changes.

I have looped through the list before kicking of the thread, and then immediately inside the thread, and I've found the results to be different.

I have since solved the problem (I think!) by making the Dictionary variable global.  Using the [ThreadStatic] property is next on the list of possible fixes.

What I really want to know is why does the myList object changes inside ProcessList() presumably when the myList object is re-assigned in ProcessEntries() ?  Are these not two different Lists in memory?  

Is there a way to specify that you want to pass a parameter to a thread and not have it be altered by the parent thread or other threads during execution? (This would be similar to the [ThreadSafe] attribute for global variables)


Answers (1)