À propos des paramètres de thread (2.0), de la « valeur de retour » et de la suspension du thread
1. Paramètres du fil :
Parfois, vous souhaitez transmettre des informations au thread auxiliaire. Ici, vous devez utiliser
l'exemple de délégué ParameterizedThreadStart :
private void btRunThread_Click(object
sender, EventArgs e)
{
Thread t = new Thread(new ParameterizedThreadStart(this.ThreadRun));
(100
);
private void ThreadRun(object o)
{
this.lbCompleted.Invoke((MethodInvoker)delegate { this.lbCompleted.Text = System.Convert.ToString(o); } })
;
2. Des fonctions similaires peuvent être obtenues grossièrement via des proxys. Exemple :
class Program
{
static void Main(string[] args)
{
ThreadClass tc = new ThreadClass(
new MyDlg(DlgMethod));
ThreadRun ));
Console.WriteLine(
"deuxième thread terminé");
thread.Start
(
)
;
private static void DlgMethod(int i)
{
Console.WriteLine("Résultat du deuxième thread :{0}", i } }
)
;
délégué public void MyDlg(int i);
classe ThreadClass
{
privé MyDlg myDlg ;
public ThreadClass (MyDlg pDlg)
{
this.myDlg = pDlg
}
public void ThreadRun()
{
int total = 0;
pour (int i = 0; i < 100; i++)
{
total += i
}
si (monDlg != null)
{
monDlg(total);
}
}
}
3. Suspension des threads :
(1) Méthode .join
Notes MSDN : Tout en continuant à exécuter le traitement standard de la pompe de messages COM et SendMessage, le thread appelant est bloqué jusqu'à ce qu'un thread se termine.
J'étais confus et j'ai essayé moi-même. Il semble qu'après que le thread ait appelé la méthode join, le thread accapare tout le temps CPU jusqu'à ce que la tâche du thread soit terminée. Vous ne savez pas si c'est le cas ?
(2).
La méthode abort
termine immédiatement le thread
(3). Exemple de définition de l'identifiant
:
class Program
{
private static bool
stop
;
Thread t = new Thread(new ThreadStart(ThreadRun));
t.Start();
Thread.Sleep(100)
;
Console.Read()
;
static void ThreadRun()
{
while (!stop)
{
Console.WriteLine("Faire du travail..." }
}
}
)
;
http://www.cnblogs.com/KissKnife/archive/2006/10/03/520463.html