List<> Problem



  • habe ein problem:

    hab eine klasse, sozusagen der JobManager x in dem ist eine Liste (System.Collections.Generic.List<>) die instanzen von der klasse "Job" aufnimmt.
    nun habe ich eine Reihe Threads die die Jobs erledigen. Die Threads bekommen als parameter eine Instanz der Klasse Job.

    nun meine frage: wenn ein Thread zB das Feld Job.Status ändert soll sich das auch in der Liste ändern, wie kann man das am elegantesten lösen?
    die Instanz als Referenz übergeben?
    oder bei jeder Wertänderung neu in die Liste kopieren?

    hier ein der dazugehörige Code:

    public class Job
        {
            private int jobId;
    
            private string description, currentworkdesc;
    
            public JobFunction jobFunction;
    
            public Thread Threadie;
            public object[] Parameters;
    
            public Job(int jobid)
            {
                jobId = jobid;
            }
    
            public int JobID
            {
                get { return jobId; }
            }
    
            public string Description
            {
                get { return description; }
                set { description = value; }
            }
    
            public bool IsFree
            {
                get { return isFree; }
                set { isFree = value; }
            }
        }
    
            public void CreateJob(JobFunction Function, string Description, params object[] parms)
            {
                Job x = new Job(CurrentJobs.Count);
                x.Description = Description;
                x.jobFunction = Function;
    
                int cnt = 0;
                x.Parameters = new object[parms.Length];
    
                foreach (object parm in parms)
                {
                    x.Parameters[cnt++] = parm;
                }
    
                CurrentJobs.Add(x);
    
                x.IsFree = false;
                Thread curr = new Thread(StartThread);
                x.Threadie = curr;
                Threads.Add(curr);
                curr.Start(x);
            }
    
            void StartThread(object par)
            {
                Job myJob = par as Job;
    
                if (myJob != null)
                {
                    myJob.jobFunction.Invoke(myJob);
                }
    
                JobFinished(myJob);
            }
    
            public void JobFinished(otrJob Job)
            {
                CurrentJobs.Remove(Job);
                Threads.Remove(Job.Threadie);
            }
        }
    
    Anwendung:
    
    void Record(Job me)
    {
        Console.WriteLine("Test");
        me.Description = "Hello XD";
        // Nun soll sich der wert auch in der Liste ändern!
        return;
    }
    
    jobmgr.CreateJob(Record, "Test");
    


  • Da Job eine Klasse ist und in C# automatisch per Referenz übergeben wird, ändert sich auch automatisch der Inhalt.
    Oder hast du danach einen anderen Wert in der Liste stehen?


Anmelden zum Antworten