委托多线程

public partial class Form1 : Form

    {

        /*

         * 界面上有一个button,和一个textbox,点击button1时,开始一个新线程,新线程中有一个方法,从0开始计数

         * 并累加,且将每一个新的数字显示到textbox1中去

         * */

        public Form1()

        {

            InitializeComponent();

        }

        public delegate void SetTextDelegate(int text);

        private void button1_Click(object sender, EventArgs e)

        {

            Thread th = new Thread(new ThreadStart(SetText));

            th.Start();

        }

        private void SetText()

        {

            for (int a=0;a<1000000;a++)

            {

                if (textBox1.InvokeRequired)

                {

                    textBox1.Invoke(new SetTextDelegate(SetTextDo), a);

                }

            }

        }

        public void SetTextDo(int i)

        {

            textBox1.Text = i.ToString();

        }

    }

 #region Windows 窗体设计器生成的代码

        /// <summary>

        /// 设计器支持所需的方法 - 不要

        /// 使用代码编辑器修改此方法的内容。

        /// </summary>

        private void InitializeComponent()

        {

            this.button1 = new System.Windows.Forms.Button();

            this.textBox1 = new System.Windows.Forms.TextBox();

            this.SuspendLayout();

            // 

            // button1

            // 

            this.button1.Location = new System.Drawing.Point(13, 23);

            this.button1.Name = "button1";

            this.button1.Size = new System.Drawing.Size(75, 23);

            this.button1.TabIndex = 0;

            this.button1.Text = "button1";

            this.button1.UseVisualStyleBackColor = true;

            this.button1.Click += new System.EventHandler(this.button1_Click);

            // 

            // textBox1

            // 

            this.textBox1.Location = new System.Drawing.Point(145, 23);

            this.textBox1.Name = "textBox1";

            this.textBox1.Size = new System.Drawing.Size(100, 21);

            this.textBox1.TabIndex = 1;

            // 

            // Form1

            // 

            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);

            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;

            this.ClientSize = new System.Drawing.Size(284, 262);

            this.Controls.Add(this.textBox1);

            this.Controls.Add(this.button1);

            this.Name = "Form1";

            this.Text = "Form1";

            this.ResumeLayout(false);

            this.PerformLayout();

        }

时间: 2024-10-11 03:18:39

委托多线程的相关文章

[2014-9-13]委托多线程

周六学习的时间. 继续学习委托,多线程. 1.简单委托的定义 delegate int MyDel(int a,int b); MyDel myDel = new MyDel(Add); //Add方法必须和委托MyDel有相同的参数和返回值 myDel+=Add2 //多播委托 2.匿名函数 MyDel del =delegate(int a,int b){return a+b} console.write(del(3,1)) 3.lamba表达式 MyDel lamba =(a,b)=>{r

OSGI.NET插件方式开发你的应用

之前一直从事C# WEB开发.基本都是业务开发,性能优化. 体力活占比90%吧.模块真的很多很多,每次部署经常出先各种问题.发布经常加班. 今年开始接触winform 开发.发现C# 的事件  委托 多线程 插件化开发 用的非常普遍. WEB开发一般都由框架做好了.开发人员基本上写业务代码,和工具类就可以了.相对来说WEB真的容易很多,而且WEB程序执行流程基本就是那几个. Winform就复杂很多了.各种类之间跳来跳去,有时候都不知道为什么,如何 去的别的类执行了. 比如异步 .委托.定时 .

C#中利用委托实现多线程跨线程操作

在使用VS2005的时候,如果你从非创建这个控件的线程中访问这个控件或者操作这个控件的话就会抛出这个异常.这是微软为了保证线程安全以及提高代码的效率所做的改进,但是也给大家带来很多不便. 其实解决这个问题有两种方法:一,是通过设置System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;在你的程序初始化的时候设置了这个属性,而且在你的控件中使用的都是微软Framework类库中的控件的话,系统就不会再抛出你上面所说的

C# 多线程操作之异步委托

标签: 多线程任务nullstringhtml工作 2012-06-29 23:00 1276人阅读 评论(0) 收藏 举报  分类: C/C++/C#/dotnet(126)  目录(?)[+] 在应届生找工作的时候,多线程操作几乎是所有的公司都会问及的一个基本问题. 这里做了一个多线程操作的总结,这里总结了通过异步委托来实现多线程操作. 定义一个委托,是创建一个线程的最简单的方法,并且异步调用它.委托是方法的类型安全的引用.同时委托还智齿异步调用方法. 委托使用线程池来完成异步任务. 当自己

多线程、委托、Invoke解决winform界面卡死的问题,并带开关

一.知识点介绍 1,更新控件的内容,应该调用控件的Invoke方法. Invoke指: 在拥有控件的基础窗口句柄的线程上,用指定的参数列表执行指定委托.该方法接收一个委托类型和委托的参数,因此需要定义委托类型变量,然后传递给Invoke方法. 如果其他线程直接调用方法更新控件内容,报错:线程间操作无效: 从不是创建控件“richTextBox1”的线程访问它. 2,委托的本质是某一类型的方法,这些方法具有相同的参数和返回类型. 委托类似于C语言中的函数指针,可以指向多个相同类型的函数. 定义委托

C#为什么多线程控制winform需要用委托?

C#(C#培训 )为什么多线程控制winform需要用委托?比如我新起了一个线程A,在A线程里要对winform的list控件里显示数据,我需要用一个委托函数来实现. 因为winform是主线程创建的,你用另外一个线程来调用它就可能会出现两个线程同时访问同一个资源的问题,这个时候很容易出现错误,比如A线程改变窗口的颜色为红色,B线程取窗口的颜色,如果这两个线程正好碰到一起,可能A略先于B,那么就是B取出来的红色,如果略后于那么就是原来的颜色,而这和CPU的繁忙度.时间片的轮转是相关的,是一种随机

异步和多线程,委托异步调用,Thread,ThreadPool,Task,Parallel,CancellationTokenSource

1 进程-线程-多线程,同步和异步2 异步使用和回调3 异步参数4 异步等待5 异步返回值 5 多线程的特点:不卡主线程.速度快.无序性7 thread:线程等待,回调,前台线程/后台线程, 8 threadpool:线程池使用,设置线程池,ManualResetEvent9 Task初步接触 10 task:waitall waitany continueWhenAny continueWhenAll  11并行运算Parallel 12 异常处理.线程取消.多线程的临时变量和lock13 A

WinForm多线程+委托防止界面卡死

1.当有大量数据需要计算.显示在界面或者调用sleep函数时,容易导致界面卡死,可以采用多线程加委托的方法解决 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO; using System

WinForm多线程及委托防止界面假死

当有大量数据需要计算.显示在界面或者调用sleep函数时,容易导致界面卡死,可以采用多线程加委托的方法解决. using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using Syste