zoukankan      html  css  js  c++  java
  • C#多线程应用:子线程更新主窗体控件的值(一)

    我记得以前写过一次关于多线程的调用及更新的文章,由于时间比较久了,现在一时没找到。在做项目的时候,用到了多线程,还是有很多的同事在问多线程更新主窗体的事情,现在就这个事情做个记录。

    说起多线程之间的更新或调用,无非都是代理之类的,可能很多人有不同的看法。

    今天也不想和大家讨论底层的实现,就目前的问题而说,告诉大家两个常用的方式进行线程间的调用:

    1)定义一个委托代理实现回调函数;

    2)在子线程中使用Invoke返回主线程;

    刚刚我已经说了,今天主要说代理的使用,如果你对这方面的知识点相对薄弱的话,最好先查查代理的使用。

    对于上面的这两种方式的不同一个是主线程实现,另一个在子线程中实现,详细的不同的使用你可以去百度看看;

    今天主要告诉大家第一种方式,在主线程中实现具体功能,由于此类代码网上到处都是,所以我也直接从网上copy一份,以下是代码的实现:

     

    程序了开 了4个子线程.各自独立.子线程根据输入信号判断while循环,符合条件退出while循环,该子线程就算运行结束了,可是主线程怎么知道他执行完了呢?
    难道用一个时间触发器,多少时间检测一下各个进程的运行情况?

    问题补充:

    难道用一个时间触发器,多少时间检测一下各个线程的运行情况? 
     
    满意回答
    定义一个委托实现回调函数
    public delegate void CallBackDelegate(string message);
    
    程序开始的时候
    //把回调的方法给委托变量
    CallBackDelegate cbd = CallBack;
    //启动线程
    Thread th = new Thread(Fun);
    th.Start(cbd);//开始线程,代入参数
    
    //线程执行的方法 参数是个委托, 线程中参数需要用object类型.
    public void Fun(object o)
    {
            //这里是你的操作代码,循环,根据条件退出while
    	while(true)
            {
            }
            //把传来的参数转换为委托
    	CallBackDelegate cbd = o as CallBackDelegate;
            //执行回调.
    	cbd("这个线程传回的信息");
    }
    
    //回调方法
    private void CallBack(string message)
    {
            //主线程报告信息,可以根据这个信息做判断操作,执行不同逻辑.
    	MessageBox.Show(message);
    }
    出处:http://blog.csdn.net/suncherrydream/article/details/8571890
  • 相关阅读:
    c#时间函数
    .NET中的lock(C#版本)
    关于OpenSmtp邮件标题过长,附件名,用户名出现乱码问题的终及解决Dll文件
    Windbg 用法
    使用OpenXML将数据导入到Excel模板中
    Compiere源码workspace的两个配置文件内容
    我学MEF系列(8):MEF+Unity实现可扩展拦截器
    基于插件架构的简单的Winform框架(上)
    我学Flash/Flex(2):AS3读取XML文件内容
    我学Flash/Flex(1):Action Script3.0基础知识
  • 原文地址:https://www.cnblogs.com/mq0036/p/3678440.html
Copyright © 2011-2022 走看看