Hur gör jag i det här exemplet för att kunna kontrolera status-värdet i Main-Metoden? Skapa ett fält som är static och använd det i din klass. problemet är snarare att du inte kommer att kontrollera ditt status värde när du tror det. En fråga om lock: Ifall någon annan försöker komma åt den medan den är låst, väntar den då tills den är olåst eller blir det exception eller hur...? Den väntar tills den inte är låst längre.. fast varför ska han starta en ny tråd om main tråden iaf bara ska stå och loopa och kolla en status??? Det kan man ju undra, men det är säkert tänkt att det skall göras andra saker undertiden i Main tråden, medans den andra tråden gör sina saker och när det är gjort så ändras status till något. Och då kan main tråden känna av detta och göra något speciellt. Frågan är vad Jimmie har tänkt göra med och i tråden. Ett Asynkront anrop skulle som du säger fungera bra här om syftet är enbart att köra en metod och när den är klar så så anropas en callback metod.static?
<code>
using System;
using System.Threading;
class Status
{
public static void Main()
{
Thread t1 = new Thread(new ThreadStart(uppdatera_Status));
t1.Start();
//Använd status...
}
public static void uppdatera_Status();
{
string status="";
while(status!="quit")
{
//Kolla status...
status=value;
}
}
}
</code>Sv: static?
Något likt detta borde fungera:
<code>
using System;
using System.Threading;
class Status
{
private static string status;
public static void Main()
{
t1 = new Thread(new ThreadStart(uppdatera_Status));
t1.Start();
if(status=="....")
//Använd status...
}
public static void uppdatera_Status();
{
status = "";
while(status!="quit")
{
//Kolla status...
status=value;
}
}
}
</code>
/Fredrik Normén NSQUARED2
http://www.nsquared2.netSv: static?
Du kan inte veta när tråden körs. Din main tråd fortsätter att köras "under tiden" som din uppdatera_status körs.
Vilket betyder att rent teoretiskt så kan din main tråd ha exekverats färdigt innan din uppdatera_status har körts. Vilket säkert inte är vad du vill.
om du använder dig av fredriks metod så glöm inte att göra en lock på status variablern undertiden som du läser från den, annars så kan du få "intressanta" fel.
MVH
- MagnusSv: static?
Sv: static?
Magnus har helt rätt. Eftersom tråden har sitt egna liv så måste du i din main anävnda dig av tex en eveighets loop som kontrollerar trådens status.
/Fredrik Normén NSQUARED2
http://www.nsquared2.netSv: static?
varför inte göra den nya trådens jobb i main tråden???
//RogerSv: static?
Fast då är det ju Asynchrona funktions anrop den bästa lösningen. Main tråden skapar gör ett asynchront anrop till en method, denna method starts i en egen tråd och körs. När den sedan är färdigt så kallas en 3 method och körs, och där ikan du göra vad du vill. Borde ju vara den smidigaste lösningen på problemet.
- MSv: static?
/Fredrik Normén NSQUARED2
http://www.nsquared2.net