向线程传递数据与线程用回调方法检索数据
生活随笔
收集整理的這篇文章主要介紹了
向线程传递数据与线程用回调方法检索数据
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
用回調方法檢索數據
/**//*用回調方法檢索數據
下面的示例演示了一個從線程中檢索數據的回調方法。包含數據和線程方法的類的構造函數也接受代表回調方法的委托;
在線程方法結束前,它調用該回調委托。
*/
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("線程執行結束");??
????}
????//回調處理函數,應與ExampleCallback的參數類型應一致
????public?static?void?ResultCallback(int?lineCount)?
????{
????????Console.WriteLine("printed?{0}?lines.",?lineCount);??
????}
}
向線程傳遞數據
/**//*向線程傳遞數據
ThreadStart?委托既沒有參數也沒有返回值。這意味著不可以使用需要參數的方法啟動線程,或從方法中獲得返回值。?
為向線程傳遞數據,需要創建一個用來保持數據和線程方法的對象,如下面的兩個代碼示例所示。?
為檢索線程方法的結果,您可以使用回調方法,如第二個代碼示例中所示。?
*/
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("線程執行結束");??
????}
}
/**//*用回調方法檢索數據
下面的示例演示了一個從線程中檢索數據的回調方法。包含數據和線程方法的類的構造函數也接受代表回調方法的委托;
在線程方法結束前,它調用該回調委托。
*/
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("線程執行結束");??
????}
????//回調處理函數,應與ExampleCallback的參數類型應一致
????public?static?void?ResultCallback(int?lineCount)?
????{
????????Console.WriteLine("printed?{0}?lines.",?lineCount);??
????}
}
向線程傳遞數據
/**//*向線程傳遞數據
ThreadStart?委托既沒有參數也沒有返回值。這意味著不可以使用需要參數的方法啟動線程,或從方法中獲得返回值。?
為向線程傳遞數據,需要創建一個用來保持數據和線程方法的對象,如下面的兩個代碼示例所示。?
為檢索線程方法的結果,您可以使用回調方法,如第二個代碼示例中所示。?
*/
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("線程執行結束");??
????}
}
轉載于:https://www.cnblogs.com/hanguoji/archive/2007/02/27/657947.html
總結
以上是生活随笔為你收集整理的向线程传递数据与线程用回调方法检索数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于动态代码生成技术的动态对象工厂
- 下一篇: 巅峰极速中保时捷taycan多少钱?