.NET并行计算和并发3.2-多线程调用Invoke

以下这个例子是用一个后台线程执行计算逻辑,这样不影响前台界面操作,也就是说

可以在前台UI界面执行其他操作。

重点是新线程中,调用了一个委托方法,这个方法是需要填充数据到前台控件,因为

前台控件是在原来的线程中创建的,所以在新线程中需要调用Invoke方法,实时的展示

后台逻辑的计算进度。

代码如下:

  1  public partial class Form1 : Form
  2     {
  3         private delegate  void mydelegate(long j);
  4         private mydelegate  dele;
  5         public Form1()
  6         {
  7             InitializeComponent();
  8             dele += new mydelegate(delegateMethod);
  9         }
 10
 11         private void delegateMethod(long j)
 12         {
 13             this.textBox1.Text = j.ToString();
 14         }
 15
 16         private void button1_Click(object sender, EventArgs e)
 17         {
 18             Thread thd = new Thread(threadMethod);
 19             thd.Start();
 20         }
 21
 22         private void threadMethod()
 23         {
 24             long j = 0;
 25             for (int i = 0; i < 1e10; i++)
 26             {
 27                 j++;
 28                 if (j%1000 == 0)
 29                 {
 30                     //调用Invoke方法后,会在原来的创建textbox1的线程中执行delegateMethod方法。
 31                     this.Invoke(dele,j);
 32                 }
 33             }
 34         }
 35     }
 36 

时间: 2024-08-18 04:43:02

.NET并行计算和并发3.2-多线程调用Invoke的相关文章

.NET并行计算和并发5:多线程编程一般指导性原则

1 使用多线程时要考虑以下准则: 2 不要使用 Thread.Abort 终止其他线程. 对另一个线程调用 Abort 无异于引发该线程的异常,也不知道该线程已处理到哪个位置. 3 不要使用 Thread.Suspend 和 Thread.Resume 同步多个线程的活动. 请使用 Mutex.ManualResetEvent.AutoResetEvent 和 Monitor. 4 不要从主程序中控制辅助线程的执行(如使用事件), 而应在设计程序时让辅助线程负责等待任务,执行任务,并在完成时通知

高性能、高并发TCP服务器(多线程调用libevent)

本文讲述的TCP服务器是模仿memcache中的TCP网络处理框架,其中是基于libevent网络库的. 主线程只处理监听客户端的连接请求,并将请求平均分配给子线程. 子线程处理与客户端的连接以及相关业务. 每个子线程有一个"连接"队列.每个"连接"有一个"反馈"队列. 先上个流程图,要上班了,以后再解释.代码以后再上··· 实现代码地址:http://download.csdn.net/detail/aillean/7521245

多线程调用生成主键流水号存储过程产生主键冲突问题解决方案

遇到开发多线程测试插入数据的时候发现主键冲突问题 问题具体描述如下: -------------------------------------------------------------- 调用Procedure_insert Procedure_insert Begin Call procedure(获取流水号) Insert into table values(流水号作为id,其他列); End 流水号存储过程: Update 统计表 统计字段+1 Update 统计表 最终流水号 s

29、Java并发性和多线程-非阻塞算法

以下内容转自http://ifeve.com/non-blocking-algorithms/: 在并发上下文中,非阻塞算法是一种允许线程在阻塞其他线程的情况下访问共享状态的算法.在绝大多数项目中,在算法中如果一个线程的挂起没有导致其它的线程挂起,我们就说这个算法是非阻塞的. 为了更好的理解阻塞算法和非阻塞算法之间的区别,我会先讲解阻塞算法然后再讲解非阻塞算法. 阻塞并发算法 一个阻塞并发算法一般分下面两步: 执行线程请求的操作 阻塞线程直到可以安全地执行操作 很多算法和并发数据结构都是阻塞的.

day10-python并发编程之多线程协程及MySQL

第1章 python并发编程之多线程 1.1 死锁现象与递归锁 1.1.1 死锁概念 进程也有死锁与递归锁,在进程那里忘记说了,放到这里一切说了额 所谓死锁: 是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程,如下就是死锁 1.1.2 博客实例 from threading import Thread,Lock import time mutexA=L

Python并发编程04/多线程

目录 Python并发编程04/多线程 1.生产消费者模型 2.线程的理论知识 2.1什么是线程 2.2线程vs进程 2.3线程的应用 3.开启进程的两种方式 3.1第一种方式 3.2第一种方式 4.线程vs进程的代码对比 4.1开启速度对比 4.2对比pid 4.3同一个进程内线程共享内部数据 5.线程的其他方法 6.join与守护线程 6.1join 6.2守护线程 7.互斥锁 Python并发编程04/多线程 1.生产消费者模型 #编程思想,模型,设计模式,理论等等,都是交给你一种编程的方

Java并发编程之多线程同步

线程安全就是防止某个对象或者值在多个线程中被修改而导致的数据不一致问题,因此我们就需要通过同步机制保证在同一时刻只有一个线程能够访问到该对象或数据,修改数据完毕之后,再将最新数据同步到主存中,使得其他线程都能够得到这个最新数据.下面我们就来了解Java一些基本的同步机制. Java提供了一种稍弱的同步机制即volatile变量,用来确保将变量的更新操作通知到其他线程.当把变量声明为volatile类型后,编译器与运行时都会注意到这个变量是共享的.然而,在访问volatile变量时不会执行加锁操作

Java 并发和多线程(一) Java并发性和多线程介绍[转]

作者:Jakob Jenkov 译者:Simon-SZ  校对:方腾飞 http://tutorials.jenkov.com/java-concurrency/index.html 在过去单CPU时代,单任务在一个时间点只能执行单一程序.之后发展到多任务阶段,计算机能在同一时间点并行执行多任务或多进程.虽然并不是真正意义上的“同一时间点”,而是多个任务或进程共享一个CPU,并交由操作系统来完成多任务间对CPU的运行切换,以使得每个任务都有机会获得一定的时间片运行. 随着多任务对软件开发者带来的

NDK使用技巧、多线程调用注意、ndk中的工具使用

//NDK 使用技巧和多线程调用注意 //http://www.ibm.com/search/csass/search/?q=ndk&sn=dw&lang=zh&cc=CN&en=utf&hpp=20&dws=cndw&lo=zh void demo(JNIEnv* env, jobject thiz) { //这JNI接口指针可以存储,但只在当前线程仍然是有效的. /* A JNI environment pointer (JNIEnv*) is