foreach (string item in items) { Thread thread = new Thread(Work); thread.Name = item; thread.Start(); }
Console.ReadLine(); }
static void Work() { Console.WriteLine(Thread.CurrentThread.Name + " køre nu..."); Console.WriteLine(Thread.CurrentThread.Name + " har antal : " + GetAntal());
Thread[] threads = new Thread[10]; for (int x = 0; x < 10; ++x) { threads[x] = new Thread(MultiWork); threads[x].Name = Thread.CurrentThread.Name; threads[x].Start(); }
// Wait for them to complete foreach (Thread thread in threads) { thread.Join(); }
Console.WriteLine(Thread.CurrentThread.Name + " har antal : " + GetAntal()); Console.WriteLine(Thread.CurrentThread.Name + " slutter nu..."); }
Hvis den her bliver kørt så er resultat : A køre nu... A har antal : 0 A har antal : 10 A Slutter nu...
Hvis jeg så tilføjer : items.Add("B"); i toppen af Main. Så er resultat: A køre nu... A har antal : 0 B køre nu... B har antal : 0 B har antal : 19 B Slutter nu... A har antal : 20 A Slutter nu...
Nogen som ved hvordan jeg holder A og B fra hinanden ? Så dataen ikke køre sammen ??
måske du skulle lade være med at bruge den samme globale variabel til dit antal... men lave en variabel i tråden, og så give den med til dine funktions kald...
Thread[] threads = new Thread[10]; for (int x = 0; x < 10; ++x) { threads[x] = new Thread(MultiWork); threads[x].Name = Thread.CurrentThread.Name; threads[x].Start(); }
// Wait for them to complete foreach (Thread thread in threads) { thread.Join(); }
Lav en klasse med data og work metode, lave en instans af den klasse per traad der skal koere, gem input data i objektet, start traad, lad traad gemme output data i objektet, vent paa traad er faerdig, hent output data fra objektet.
Jeg lavede engang foelgende til et andet spoergsmaal:
using System; using System.Diagnostics; using System.IO; using System.Threading;
namespace E { public class MainClass { private const int NHOST = 256; public static void Main(string[] args) { Pinger[] p = new Pinger[NHOST]; Thread[] t = new Thread[NHOST]; for(int i = 0; i < NHOST; i++) { p[i] = new Pinger(i); t[i] = new Thread(new ThreadStart(p[i].Run)); t[i].Start(); } for(int i = 0; i < NHOST; i++) { t[i].Join(); Console.WriteLine(p[i].Res); } } } public class Pinger { private int no; private string res; public Pinger(int no) { this.no = no; res = ""; } public void Run() { ProcessStartInfo psi = new ProcessStartInfo(); psi.FileName = "ping"; psi.Arguments = "192.168.0." + no; psi.CreateNoWindow = true; psi.UseShellExecute = false; psi.RedirectStandardOutput = true; Process p = Process.Start(psi); StreamReader sr = p.StandardOutput; string line; while((line = sr.ReadLine()) != null) { res += line; } sr.Close(); p.Close(); } public string Res { get { return res; } } } }
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.