用回調方法檢索資料
下面的樣本示範了一個從線程中檢索資料的回調方法。包含資料和線程方法的類的建構函式也接受代表回調方法的委託;
線上程方法結束前,它調用該回調委託。
*/
using System;
using System.Threading;
//被執行個體化的類,用於傳遞參數進行操作
public class ThreadWithState
{
private string boilerplate;
private int value;
//定義一個回呼函數
private ExampleCallback callback;
//接收線程傳遞的參數
public ThreadWithState(string text, int number, ExampleCallback callbackDelegate)
{
boilerplate = text;
value = number;
callback = callbackDelegate;
}
public void ThreadProc()
{
Console.WriteLine(boilerplate, value);
//判斷是否執行回呼函數、並把參數傳遞給回呼函數
if (callback != null)
callback(1);
}
}
//聲明一個回呼函數:注意傳遞的參數要與Example類中的函數參數類型一致
public delegate void ExampleCallback(int lineCount);
//案例主類
public class Example
{
public static void Main()
{
//執行個體化ThreadWithState,並傳遞參數,注意:new ExampleCallback(ResultCallback)的命名空間引用,及其傳遞的參數(ResultCallback函數)
ThreadWithState tws = new ThreadWithState("This number {0}.", 42, new ExampleCallback(ResultCallback));
Thread t = new Thread(new ThreadStart(tws.ThreadProc));
t.Start();
Console.WriteLine("線程開始執行");
//此為判斷線程是否執行結束,但不建議阻塞線程,這樣線程就會等待完成後再進行其他動作
//可利用:t.IsAlive是否處於執行狀態來判斷線程
t.Join();
Console.WriteLine("線程執行結束");
}
為向線程傳遞資料,需要建立一個用來保持資料和線程方法的對象,如下面的兩個程式碼範例所示。
為檢索線程方法的結果,您可以使用回調方法,如第二個程式碼範例中所示。
*/
using System;
using System.Threading;
//被執行個體化的類,用於傳遞參數進行操作
public class ThreadWithState
{
private string boilerplate;
private int value;
public ThreadWithState(string text, int number)
{
boilerplate = text;
value = number;
}
public void ThreadProc()
{
Console.WriteLine(boilerplate, value);
}
}
//建立線程調用ThreadWithState
public class Example
{
public static void Main()
{
//執行個體化類ThreadWithState,利用建構函式向線程傳遞參數
ThreadWithState tws = new ThreadWithState("This number {0}.", 42);
//建立線程並執行ThreadWithState類中的ThreadProc函數
Thread t = new Thread(new ThreadStart(tws.ThreadProc));
t.Start();
Console.WriteLine("線程開始執行");
//此為判斷線程是否執行結束,但不建議阻塞線程,這樣線程就會等待完成後再進行其他動作
//可利用:t.IsAlive是否處於執行狀態來判斷線程
t.Join();
Console.WriteLine("線程執行結束");
}
}