hej igen :o)
som udgangspunkt er det meget enkelt at starte en process op i .net
her et link :
http://www.c-sharpcorner.com/Code/2005/April/Thread.aspog... så kan du få et eksempel her, hvor der er lidt med callback, samt egne delegates og argumenter - lidt andre ting end der er dækket i artiklen.
og ellers er det jo bare at lave sådan en her:
http://www.google.dk/search?hl=da&q=.net+C%23+threading&meta=// ThreadDifinitions er bare en klasse, hvor der ligger en metode du gerne vil eksekvere i en tråd for sig.
// læg mærke til, at der gives en delegate med i constructoren, og det bliver via den muligt at realisere callbacks
// CallBackReciever er metoden der står lidt længere nede.
ThreadClass threadObject= new ThreadClass(new ThreadCallBack(CallBackReciever));
// selve tråden - metoden Procedure eksekveres, i ThreadClass-objektet.
Thread thread = new Thread(new ThreadStart(threadObject.Procedure));
thread.Start();
// metoden der modtager callbacks fra tråden
public void CallBackReciever(string threadId, ThreadCallBackEventArgs e)
{
if(e.PercentComplete == 100)
{
// ..
}
else
{
// ..
}
}
selve threadklassen ser ud som følger ... den laver noget pjat, men på en måde så du kan modtage statusmeldinger fra den undervejs som "arbejdet" udføres.
// en threadingprocedure
public class ThreadClass
{
// lidt konstanter, så du kan styre eksekveringen
private const int ITEMS = 1500;
private const int SLEEPTIME = 20000;
private const int DIV = 10;
// til at holde callbackdelegaten
private ThreadCallBack callBack;
// constructor
public ThreadClass(ThreadCallBack callBackDelegate)
{
callBack = callBackDelegate;
}
// selve proceduren
public void Procedure()
{
DateTime startTime = DateTime.Now;
int percentComplete = 0;
int itemsDone = 0;
for(int i=0;i<DIV;i++)
{
// lille pause - ellers fræser den bare igennem inde du kan nå at sige "Ib"
Thread.Sleep(SLEEPTIME/DIV);
// angivelse af hvor meget der er sket
percentComplete = 100 - ((DIV-(i+1))*(100/DIV));
itemsDone = (i+1)*(ITEMS/DIV);
// og så kald via delegaten - så status kan modtages i callback-handleren
if(callBack!=null)
{
callBack(Thread.CurrentThread.Name, new ThreadCallBackEventArgs(percentComplete, itemsDone, DateTime.Now - startTime));
}
}
}
}
for lige at få det hele med, bruges der så en customdelegate, og et customargument som følger :
// delegate
public delegate void ThreadCallBack(string threadId, ThreadCallBackEventArgs e);
// og argumentet
// custom threadstateargument
public class ThreadCallBackEventArgs : System.EventArgs
{
private int _percentComplete;
private int _numberOfItemsDone;
private TimeSpan _executionTime;
public int PercentComplete
{
get{return _percentComplete;}
}
public int NumberOfItemsDone
{
get{return _numberOfItemsDone;}
}
public TimeSpan ExecutionTime
{
get{return _executionTime;}
}
public ThreadCallBackEventArgs(int percentComplete, int numberOfItemsDone, TimeSpan executionTime)
{
_percentComplete = percentComplete;
_numberOfItemsDone = numberOfItemsDone;
_executionTime = executionTime;
}
}
håber du hermed har fået lidt at komme videre på.
mvh