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...)
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