Hej undrar vilka tekniker det finns för att lösa följande problem. Kolla på System.Threading.ThreadPool, denna klass gör det väldigt enkelt att skapa en ny tråd som kan utföra arbete parallellt med resten av ditt program. Den metod du är intresserad av är QueueUserWorkItem. Jag hade inte använt threadpoolen tilkl arbeten som håller på såpåss länge. Paralella processer i C#
Skulle vilja skapa en evighetsloop (tror det kallas threding eller något sånt i java) av en viss del av programmet. Den delen skall hela tiden ligga och ta en skärmdump av ett aktivt fönster. Medans den ligger och kör ska även annan kod exikveras parallelt och analysera de bilderna som tagits.
Hur kan jag göra detta och vad kallas denna teknik?
MVH Henrik LarssonSv: Paralella processer i C#
Om du vill vänta 1 sek mellan dina skärmdumpar kan du använda metoden System.Threading.Thread.Sleep(1000).
Hoppas detta leder dig på rätt spår!
/MattiasSv: Paralella processer i C#
Bättre då att starta en egen tråd som du kan kontrollera.
<code>
ThreadStart ts = new ThreadStart(myObj.anInstanceMethod);
Eller:
ThreadStart ts = new ThreadStart(myClass.aStaticMethod);
Sen:
Thread trScreenDumps = new Thread(ts);
trScreenDumps.IsBackground = true; // Glöm inte denna [1]
trScreenDumps.Start();
</code>
På det sättet har du hela tiden en referens till den tråden som exekverar i bakgrunden, vilket du inte har i poolen.
Om du från någon annan tråd än din huvudtråd vill uppdatera controller på ditt formulär, bör du även använda dig av forumlärets BeginInvoke metod.
<code>
MethodInvoker paintBMP = new MethodInvoker(this.PaintBMP);
this.BeginInvoke(paintBMP);
</code>
Anledningen till det är att controller inte är trådsäkra i sig självt, men genom att använda methodinvokern och BeginInvoke, så flyttas exekveringen av PaintBMP till huvudtråden, och all uppdatering av formuläret kommer således köra från samma tråd och då vara trådsäkert.
Ovanstående gällande formulär är en sanning med modifikation, återkommer efter första passet kursen jag håller nu med en bättre förklaring, men använd den koden.
[1] Utan IsBackground = true, så kommer CLR anta att din nya tråd är en huvudtråd och du blir tvungen att själv avsluta den för att din process skall gå ner.