滴水穿石 C#中多线程 委托的使用
下面是一个涉及线程和委托综合的小例子。
using System;
using System.ComponentModel;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;//使用多线程的声明(准确的说是要在main主线程中建立新的线程时要进行的引
public partial class Form1 : Form
public static int Num = 0;
Thread thread1; //在主线程中声明线程1
Thread thread2; //在主线程中声明线程2
daililist list1;//委托实例化,即建立委托对应的事件
InitializeComponent();
list1 = new daililist(updatelist);//委托处理的方法,这里updatelist是一个方法,这个句子的意思是把updatelist这个方法交给了list1这个委托实例
thread1 = new Thread(numadd );
thread1.Start();
thread2.Start();
public void updatelist()
listBox1.Items.Add (Num) ;
public void numadd()
Num ++;
listBox1.Invoke(list1);//这是自己建立的线程要调用的方法,但是listbox1是main主线程建立的控件,自定义的线程无法直接访问,上面已经定义了委托,此处应用listbox1的invoke
//到此我们理一下思路,建立线程thread1、thread2,这两个线程都指向了numadd这个方法,首先都执行Num++,然后执行listBox1.Invoke(list1),意思是说将要对listbox1操作,
private void button2_Click(object sender, EventArgs e)
thread1.Join();
thread2.Abort();
}
}
}
using System.Collections.Generic;
using System.Data;
using System.Linq;
用说明) namespace mytest
{ {
delegate void daililist();//主线程之外的线程要调用main线程中建立的控件,需要使用委托的方式,此处是委托的定义
public Form1()
{
} private void button1_Click(object sender, EventArgs e)
{
thread2 = new Thread(numadd); }
{
}
{
//方法把所有对listbox1的操作都交给委托list1去处理。
//但是具体操作在list1这个委托当中,然后这个委托指向了updatelist并执行,至此thread1、thread2都完成了对listbox1的操作!
} {
thread1.Abort();
thread2.Join();
滴水穿石 C#中多线程 委托的使用的更多相关文章
- C#中多线程 委托的使用
背景: 什么是多线程?我们在建立以个C#项目时,往往会在Form1上添加控件,然后写代码,初 学者都是在重复这个过程,其实这个过程是单线程的,可以理解为只有“main”主线程,有 的时候往往需要同时 ...
- WinForm中 事件 委托 多线程的应用
WinForm中 事件 委托 多线程的应用[以一个下载进度条为例] 第一步:首先我们创建一个winfor的项目 第二步:我们建一个窗体在一个窗体里面 打开一个另外的窗体 另外的窗体有一个按钮 点击后就 ...
- C# winform编程中多线程操作控件方法
private void Form1_Load(object sender, EventArgs e) { Thread newthread = new Thread(new ThreadStart( ...
- 2.1多线程(java学习笔记) java中多线程的实现(附静态代理模式)
一.多线程 首先我们要清楚程序.进程.线程的关系. 首先进程从属于程序,线程从属于进程. 程序指计算机执行操作或任务的指令集合,是一个静态的概念. 但我们实际运行程序时,并发程序因为相互制约,具有“执 ...
- iOS中多线程知识总结(一)
这一段开发中一直在处理iOS多线程的问题,但是感觉知识太散了,所以就把iOS中多线程的知识点总结了一下. 1.基本概念 1)什么是进程?进程的特性是什么? 进程是指在系统中正在运行的一个应用程序. ...
- 2.C#中通过委托Func消除重复代码
阅读目录 一:重复的代码 二:C#中通过委托Func消除重复代码 一:重复代码 public class Persion { public string Name { get; set; } ...
- c++中实现委托
成员函数指针与高性能的C++委托(上篇) 撰文:Don Clugston 引子 标准C++中没有真正的面向对象的函数指针.这一点对C++来说是不幸的,因为面向对象的指针(也叫做"闭包(clo ...
- [转] c#中 多线程访问winform控件
原文 c#中多线程访问winform控件的若干问题小结 我们在做winform应用的时候,大部分情况下都会碰到使用多线程控制界面上控件信息的问题.然而我们并不能用传统方法来解决这个问题,下面我将详细的 ...
- iOS 中多线程的简单使用
iOS中常用的多线程操作有( NSThread, NSOperation GCD ) 为了能更直观的展现多线程操作在SB中做如下的界面布局: 当点击下载的时候从网络上下载图片: - (void)loa ...
随机推荐
- Spark持久化策略
spark持久化策略_缓存优化persist.cache都是持久化到内存缓存策略 StorageLevel_useDisk:是否使用磁盘_useMemory:是否使用内存_useOffHeap:不用堆 ...
- Spark官网
Components Spark applications run as independent sets of processes on a cluster, coordinated by the ...
- MVC中Controller弹出提示框
1.删除时查询是否有先关数据,有提示删除相关数据:成功刷新页面:失败提示删除失败 Controller: 有相关数据:return RedirectToAction("Index" ...
- Merkle 树——空间换时间,分而治之的hash表,通过根节点是由它的两个子节点内容的哈希值组成来校验数据完整性,定位篡改的数据位置
Merkle 树 图 1.5.6.1 - Merkle 树示例 默克尔树(又叫哈希树)是一种二叉树,由一个根节点.一组中间节点和一组叶节点组成.最下面的叶节点包含存储数据或其哈希值,每个中间节点是它的 ...
- pandas 学习 —— pivot table
0. DataFrame 的 index.columns.values >> df = pd.DataFrame(np.arange(6).reshape(3, 2), index=['o ...
- [冬令营模拟]wzj的题目#1
T1 少膜一个,T3 暴力写挂 强势 rank1 -> rank2 一场比赛两道线段树分治,给力 T1 password 给你 m 个禁止字符串,求长度为 n 的所有字符串中至少包含这些禁止字符 ...
- office2016_windows永久激活查看方法
YC7N8-G7WR6-9WR4H-6Y2W4-KBT6X 首先要保证你安装了 百云址:http://pan.baidu.com/share/home?uk=4011207371 如果你是win8,w ...
- webpy+nginx+uwsgi安装配置
转:(1)安装Nginx1.1 下载nginx-1.0.5.tar.gz并解压1.2 ./configure (也可以增加--prefix= path指定安装路径)此时有可能会提示缺少pcre支持,如 ...
- HDOJ1024(最大M子段和)
Max Sum Plus Plus Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- jQuery对象和DOM对象的互换
Dom 对象:指的是普通的 JavaScript 对象 jQuery对象:是包装 Dom 对象后产生的对象. 一:JQuery 对象和 Dom 对象 在使用 JQuery 过程中,我们一般(也是绝大多 ...