Über Thread-Parameter (2.0), „Rückgabewert“ und Thread-Suspendierung
1. Thread-Parameter:
Manchmal möchten Sie einige Informationen an den Hilfsthread übergeben. Hier müssen Sie
das Beispiel eines ParameterizedThreadStart-Delegaten verwenden:
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. Ähnliche Funktionen können grob durch Proxys erreicht werden:
class Program
{
static void Main(string[] args)
{
ThreadClass tc = new ThreadClass(new MyDlg(DlgMethod))
; ThreadRun );
Console.WriteLine("zweiter Threadstart");
thread.Join
(
);
Console.WriteLine("zweiter Thread abgeschlossen")
;
private static void DlgMethod(int i)
{
Console.WriteLine("Second Thread Result:{0}", i
}
}
öffentlicher Delegat void MyDlg(int i);
class ThreadClass
{
private MyDlg myDlg;
public ThreadClass(MyDlg pDlg)
{
this.myDlg = pDlg
}
public void ThreadRun()
{
int total = 0;
for (int i = 0; i < 100; i++)
{
total += i
}
if (myDlg != null)
{
myDlg(
total
)
;
3. Anhalten von Threads:
(1) .join-Methode
MSDN-Hinweise: Während die Standard-COM- und SendMessage-Nachrichtenpumpenverarbeitung weiterhin ausgeführt wird, wird der aufrufende Thread blockiert, bis ein Thread beendet wird.
Ich war verwirrt und habe es selbst versucht. Es scheint, dass der Thread nach dem Aufruf der Join-Methode die gesamte CPU-Zeit beansprucht, bis die Aufgabe des Threads abgeschlossen ist. Sie wissen nicht, ob dies der Fall ist?
(
2). Die Abbruchmethode
beendet den Thread sofort
(3). Beispiel für die Definition des Bezeichners
:
class Program
{
private staticbool
stop
;
Thread t = new Thread(new ThreadStart(ThreadRun));
t.Start
(100)
;
Console.Read();
}
static void ThreadRun()
{
while (!stop)
{
Console.WriteLine
("Do Some Work..."
)
;
http://www.cnblogs.com/KissKnife/archive/2006/10/03/520463.html