• 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
  • 相关阅读:
    61. 最长不含重复字符的子字符串
    60. 礼物的最大价值 (未理解)
    59. 把数字翻译成字符串
    58. 把数组排成最小的数
    57. 数字序列中某一位的数字 (不懂)
    spring data jpa 官方文档
    idea 编译报错 源发行版 1.8 需要目标发行版 1.8
    idea maven 依赖报错 invalid classes root
    solr
    spring boot 官方文档
  • 原文地址:https://www.cnblogs.com/mq0036/p/3678440.html
Copyright © 2020-2023  润新知