用回调方法检索数据
/**//*用回调方法检索数据
下面的示例演示了一个从线程中检索数据的回调方法。包含数据和线程方法的类的构造函数也接受代表回调方法的委托;
在线程方法结束前,它调用该回调委托。
*/
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

向线程传递数据与线程用回调方法检索数据相关推荐

  1. WinPcap笔记(5):不用回调方法捕获数据包

    这里使用pcap_next_ex()函数代替pcap_loop()函数来实现捕获数据包.pcap_loop()函数基于回调原理实现数据捕获,这是一种精妙的方法,并且在某些场合中,它是一种很好的选择. ...

  2. MATLAB笔记:打开数据文件的三种方法+读取数据文件的两种方法+保存数据文件的两种方法

    1.打开数据文件 1.1 直接打开文件 PATHNAME = 'C:\Users\s55\Desktop\dat'; FILENAME = '\data_1.dat'; str0=strcat(PAT ...

  3. 不用回调方法捕获数据包

    这次将用 pcap_next_ex() 函数代替上一次的 pcap_loop()函数. pcap_loop()函数是基于回调的原理来进行数据捕获,这是一种精妙的方法,并且在某些场合中,它是一种很好的选 ...

  4. Tencent login函数登录成功后无法成功回传数据(无法返回回调方法) Android qq授权登录

    找了一下午问题在哪里,总是无法成功回传数据,后来才发现自己没有好好看Tencent的开发文档 在某些低端机上调用登录后,由于内存紧张导致APP被系统回收,登录成功后无法成功回传数据. mTencent ...

  5. 登录系统提示请求数据成功!但回调方法出错;请检查自定义load回调函数。有没有大佬能给解答下这种怎么处理

  6. JAVA跨线程传递数据方式总结

    实现跨线程传递数据方式: v1:子线程使用主线程的局部变量 这种当主线程和子线程不在一快儿时就不适用.可以使用JDK原生的InheritableThreadLocal. v2:InheritableT ...

  7. android判断主线程_android中从子线程切换到主线程,但是显得代码很臃肿,请教大牛是怎么自定义的?...

    小弟新手一枚,我先来说说我自己在项目中的做法.因为小弟只有JAVAWEB的基础所以只能使用线程池来处理线程之间的切换 1.为了使APP不出现卡顿和内存的低消耗.我是用了synchronized 和用一 ...

  8. 大数据对社交媒体的影响_数据如何影响媒体,广告和娱乐职业

    大数据对社交媒体的影响 In advance of our upcoming event - Data Science Salon: Applying AI and ML to Media, Adve ...

  9. mysql 升序_MySQL之排序检索数据

    获取数据: 深大享:MySQL之数据准备​zhuanlan.zhihu.com 排序检索数据: 如何使用SELECT语句的ORDER BY子句,根据需要排序检索出的数据. 1.未排序检索数据 -- 未 ...

最新文章

  1. mysql数据清洗_mysql数据库如何实现亿级数据快速清理
  2. java 实例化 bean,Spring(02)——bean实例化
  3. ALV 动态显示列Demo
  4. 如何让搜索引擎抓取AJAX内容
  5. CSS3中的动画示例
  6. case when then 统计去重数据_数据分析--SQL求职面试题
  7. pytorch模型初始化
  8. 中标麒麟 V7 操作系统安装达梦数据库 DM8
  9. LumaQQ.NET For Visual Studio 2005 代码下载
  10. 《动手学深度学习》| 2 深度学习基础
  11. 80后的北漂IT人:你的未来在哪?该做好打算了!
  12. 计算机开机按f1,电脑开机按F1的原因及解决方法
  13. 【c#】服务端客户端连接类
  14. QuartusII常用操作整理
  15. 网站被劫持的危害及处理方法
  16. 你的代码值多少钱 ?
  17. request无法获取到前端发送的form表单数据
  18. 盘点 | 跨平台桌面应用开发的5大主流框架
  19. 关于汽车起重机远程监控若干问题的探讨
  20. 【HTML5游戏】碰撞球游戏

热门文章

  1. img.item()跟img[x,y]
  2. BFS Sicily 1215: 脱离地牢
  3. JavaScript绑定键盘事件的多种写法
  4. IT团队之非正式沟通
  5. Python中的range和xrange区别
  6. bootstrap modal垂直居中(简单封装)
  7. 基础知识收藏(ASP.NET的OnClientClick与OnClick事件)-2013.07.10
  8. C#支持中文的格式化字符长度方法
  9. 曹国伟:看准微博做大布局 哪怕革自己的命
  10. ReactOS 架构