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

C#为什么多线程控制winform需要用委托?比如我新起了一个线程A,在A线程里要对winform的list控件里显示数据,我需要用一个委托函数来实现。
 
因为winform是主线程创建的,你用另外一个线程来调用它就可能会出现两个线程同时访问同一个资源的问题,这个时候很容易出现错误,比如A线程改变窗口的颜色为红色,B线程取窗口的颜色,如果这两个线程正好碰到一起,可能A略先于B,那么就是B取出来的红色,如果略后于那么就是原来的颜色,而这和CPU的繁忙度、时间片的轮转是相关的,是一种随机的情况,那么B取出来的颜色就不可靠了,因此为了避免这种状况采用委托,B线程向A线程发出委托,由A线程来完成取色工作,那么可以保证取色工作的稳定性,结果也可靠

如果你实在想通过另一个线程访问winform,可以在窗口的构造函数中加入
Control.CheckForIllegalCrossThreadCalls = false;
这样可以屏蔽这个错误,不过建议还是用委托
 
这需要用到委托.
你先声明一个委托,然后,把一个操作界面的函数托给他.
你的线程里只要调用这个委托就可以了.
 
C#试写一个多线程问题(委托,Invoke(),beginInvoke())
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋 using System;
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋 using System.Collections.Generic;
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋 using System.ComponentModel;
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋 using System.Data;
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋 using System.Drawing;
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋 using System.Text;
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋 using System.Windows.Forms;
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋 using System.Threading;
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋 using System.Diagnostics;
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋 namespace _
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋{
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋         public partial class Form1 : Form
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋        {
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                 public delegate void del( string str);
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                 public delegate void del1( string str1);
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                Thread thread1,thread2;
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                 public Form1()
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                {
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                        InitializeComponent();
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                }
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                 private void button1_Click( object sender, EventArgs e)
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                {
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                         this.thread1 = new Thread( new ThreadStart( this.sa));
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                         this.thread1.Start();
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                         //MessageBox.Show(this,);
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                         this.button1.Enabled = false;
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                         //获取当前的线程好
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                         int thread1id = Thread.CurrentThread.GetHashCode();
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                         string strThreadId = Convert.ToString(thread1id);
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                        MessageBox.Show( this,strThreadId);
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                }                
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                 private void progressSet( string text)
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                {
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                                progressBar1.Value = 0;
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                                progressBar1.Maximum = 999999;
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                                 for ( int i = 0; i < 999999; i++)
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                                {
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                                        progressBar1.Value++;
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                                }
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                                progressBar1.Value = 0;                        
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                }
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                 private void sa()
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                {
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                        del pro = new del(progressSet);
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                         this.Invoke(pro, new object[] { "hello" });
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                }
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                 private void button2_Click( object sender, EventArgs e)
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                {
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                         this.thread2 = new Thread( this.sa1);
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                        thread2.Start();
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                         this.button2.Enabled = false;
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                         //获取当前的线程好
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                         int thread2id = Thread.CurrentThread.GetHashCode();
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                         string strThreadId = Convert.ToString(thread2id);
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                        MessageBox.Show( this, strThreadId);
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                }
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                 private void sa1()
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                {
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                         //其他操作    
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                         //比如将界面的TextBox内容设置一下    
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                        del1 mi1 = new del1(UpdateTextBox);
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                         this.Invoke(mi1, new object[] { "我是一个文本框" });
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                }
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                 //更新界面的方法    
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                 private void UpdateTextBox( string str)
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                {
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                         //更新    
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                         this.textBox1.Text = str;
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋                }
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋        }
C为什么多线程控制winform需要用委托? - yanweiabc123 - 人生如戏  世事如棋}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值