22. april 2007 - 19:46Der er
9 kommentarer og 1 løsning
udføre ting i baggrunden lige fra program start
jeg mangler en måde hvorpå jeg kan udføre nogle aktiviteter i baggrunden af mit program lige fra det bliver startet. Det skal være sådan at når den starter så modtager den et antal sekunder, når den tid er gået skal den udføre nogle funktioner hvor der så kommer et nyt antal sekunder der skal gå inden den udfør de samme funktioner igen og sådan skal det bare blive ved.
Public static void threadMethod() { while (!abort) { System.Console.WriteLine("running like hell"); } }
public static void Main(String []args) { Thread MyThread = new Thread(new ThreadStart(MyCallbackFunction)); MyThread.Start(); Thread.Sleep(1000); this.abort = true; }
Ok det er simpelt og der er mange ting at kigge på med tråde, SÆRLIGT synkronisering(mutex, semaforer etc). Det er vigtigt at forstå hvordan tråde opfører sig. Lad være med at bruge Thread.Suspend og Thread.Abort, da du ikke har NOGEN mulighed for at forudsige hvor i koden tråden er. Det kan potentielt skabe deadlocks. Hvis du har brug for andet end bare at starte en tråd, så læs på noget multiprogrammering så du ikke laver ulykker.
Thread MyThread = new Thread(new ThreadStart(threadMethod)); Opret en tråd der starter med at afvikle "threadMethod". Når metoden returner stopper tråden
MyThread.Start(); Starter selve tråden
Thread.Sleep(1000); Sæt hovedtråden til at sove et sekundt, så vores nye tråd får en chance for at køre lidt.
this.abort=true; Tjaa når vores nye tråd skal jo stoppe på et tidspunkt.
nu har jeg prøvet at lave det i en WinForm, men kan ikke få det til at virke. Det jeg kunne få den til at udføre noget en gang og så ikke mere, men den fik mit program til at køre meget langsom, og jeg tænkte konstant!
At det kører meget langsomt skyldes sandsynligvis at while(!abort){...} kører konstant. Hvis du vil have det til at slappe lidt af kunne det tænkes at Thread.Sleep(1000) inde i løkken var en ide.
Ved ikke hvorfor den kun gør det en gang. Prøv at debugge lidt, du kan sagtens bruge breakpoints i tråde. Du skal naturligvis ikke bruge this.abort = true før du er færdig.
jeg har fået løst det nu, var kommet til at lave en uendelig løkke i min main, men det virker perfekt nu, så du må gerne komme med et svar, takker for hjælpen!
Det smarteste er at lave en klasse med en "tråd metode". Når du så skal starte tråden så laver du en ny instans
MyClass mc = new MyClass("tada");
og bruger MyClass.Run som start method
Thread MyThread = new Thread(new ThreadStart(mc.Run)); MyThread.Start();
public class MyClass { private string myString;
private bool abort; public bool Abort { set {abort = value;} }
public MyClass(string myString) { this.myString = myString; }
public void Run() { while (!abort) { Console.WriteLine(myString); } } }
Det er skrevet fra hukommelsen direkte i textboksen her på siden, så hvis der er nogle småfejl så må du undskylde.
Synes godt om
Ny brugerNybegynder
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.