Avatar billede Slettet bruger
24. marts 2006 - 11:46 Der er 7 kommentarer

Oprette ny tråd, og sætte text for label i anden tråd.

Okay, jeg har min Form1 class med min form som indeholder en label.. jeg bruger følgende function til at finde hvor meget CPU load der er:

public void ProcessorUsage()
        {
            try
            {
                CounterSample cs1 = new CounterSample();

                PerformanceCounter pc1 = new PerformanceCounter();
                pc1.CategoryName = "Processor";
                pc1.CounterName = "% Processor Time";
                pc1.InstanceName = "_Total";
                cs1 = pc1.NextSample();
                System.Threading.Thread.Sleep(1000);

                CPULabel1.Text = Convert.ToString(Convert.ToInt32(CounterSample.Calculate(cs1, pc1.NextSample())));
                ProcessorUsage();
            }
            catch (Exception)
            {
                CPULabel1.Text = "Error";
            }
        }


Den funktion kører i en nyoprettet tråd i samme class, oprettet sådan her:


private void button1_Click(object sender, EventArgs e)
        {
            Form1 oAlpha = new Form1();
            Thread oThread = new Thread(new ThreadStart(oAlpha.ProcessorUsage));
            oThread.Start();
            CPULabel1.Text = "Running";
        }

I ProcessorUsage() prøver jeg at sætte resultatet som text i CPULabel1, men den sætter ikke noget!?.. jeg kan have en messagebox på hvor den giver mig resultatet.. men ikke for labelen. Er det så fordi man ikke kan sætte text fra en anden tråd end der hvor labelen er eller?.. håber i kan følge med :)
Avatar billede spif2001 Nybegynder
24. marts 2006 - 11:53 #1
Du skal kalde Invoke på den form, hvor labelen er. Kræver lidt delegates og sådan...
Avatar billede bitsch Nybegynder
24. marts 2006 - 11:55 #2
Uden at have set detaljerne i dit eksempel, så overvej at bruge BackgroundWorker når du har behov for "tråde". Det gør livet lidt lettere, og der er fra starten taget højde for en række fejlmuligheder.
Avatar billede spif2001 Nybegynder
24. marts 2006 - 11:57 #3
Avatar billede Slettet bruger
24. marts 2006 - 12:09 #4
okay, brugte Backgrounworker, men den siger jeg ikke må cross-threade?
Avatar billede spif2001 Nybegynder
24. marts 2006 - 12:10 #5
nemlig - kig på linket
Avatar billede spif2001 Nybegynder
24. marts 2006 - 12:10 #6
"To run them from another thread we need to use the Control.Invoke (synchronous call) or Control.BeginInvoke (asynchronous call) functions."
Avatar billede Slettet bruger
24. marts 2006 - 12:13 #7
ahh, kigger lige på det, tak. :) troede i mente to forskellige ting
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester