Avatar billede a1a1 Novice
10. februar 2002 - 10:48 Der er 2 kommentarer og
2 løsninger

Overførsel af variabler til thread...

Jeg har et simpelt threading program..

tread.cs:

using System;
using System.Threading;

public class MyThread {
    public int iSleep = 2000;       
    public int iRunThr = 0;
    public int iMaxThr = 10;
    public void Thread2() {
        Thread thr = Thread.CurrentThread;
        while (iRunThr >= iMaxThr) {
            Console.WriteLine("*** **** Thread: " + thr.Name + " paused - running " + iRunThr.ToString() + " threads");
            Thread.Sleep(1000);
        }
        iRunThr++;
        Console.WriteLine("********Total threads: " + iRunThr.ToString());
        Console.WriteLine(thr.Name + " sleep: " + iSleep);
        Thread.Sleep(iSleep);
        iRunThr--;
        Console.WriteLine("********" + thr.Name + " has ended");
    }
}
public class MyClass {
    public static void Main() {
        int iThrCount = 0;
        MyThread thr2 = new MyThread();
        for (int j=0;j<20;j++) {
            Thread tid2 = new Thread(new ThreadStart(thr2.Thread2) );
            iThrCount++;
            tid2.Name = "Thread " + j;
            tid2.Start();
        }
    }
}

Hvordan kan jeg overføre fx. variablen j til Thread2 og skrive den ud der
(Eller evt. en bestemt datarow...)
Avatar billede snepnet Nybegynder
14. februar 2002 - 03:02 #1
Jeg plejer bare at overføre eventuelle variable i cunstructoren.... du kan lige se følgende eksempel (det er så fra en windows-applikation, men princippet skulle vel være det samme).
Du skal ikke tage dig af at det hedder noget med timer.... det er taget fra noget andet, som styrede en statusbar i en dialogboks, men det virkede lidt forvirrende, så jeg har skrevet noget andet kode ind som ikke rigtig gør noget. jeg håber du kan se systemet.

//---classvariables
private DialogTimer timer;
private Thread timerCaller;
//---end of classvariables

//---start thread
timer = new DialogTimer("godmorgen", 100, 200);
//med nedenstående kan du kalde en given funktion i klassen
timerCaller = new Thread(new ThreadStart(timer.DoSomeWork));   
timerCaller.Start();
//----end of start thread

//threadclass..
class DialogTimer
{
    private string sSomeText;
    private int nSomeNumber;
    private int nSomeOtherNumber;

    public DialogTimer(string streng, int number, int othernumber)
    {
        sSomeText=streng;
        nSomeNumber=number;
        nSomeOtherNumber=othernumber;
    }
   
    public DoSomeWork()
    {
        //... hvad du nu skulle have lyst til at gøre ved værdierne   
    }   
}
//end of threadclass
Avatar billede a1a1 Novice
22. marts 2002 - 14:36 #2
ja det fandt jeg også ud af
Avatar billede a1a1 Novice
22. marts 2002 - 14:36 #3
Men lidt points får du da....
Avatar billede snepnet Nybegynder
23. marts 2002 - 15:07 #4
hehe... tak skal du have :)
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
Kurser inden for grundlæggende programmering

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