2022年多线程之跨线程操作控件 .pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《2022年多线程之跨线程操作控件 .pdf》由会员分享,可在线阅读,更多相关《2022年多线程之跨线程操作控件 .pdf(7页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、多线程之跨线程操作控件NET 原则上禁止跨线程访问控件,因为这样可能造成错误的发生,推荐的解决方法是采用代理 ,用代理方法来间接操作不是同一线程创建的控件。第二种方法是禁止编译器对跨线程访问作检查,可以实现访问,但是出不出错不敢保证Control.CheckForIllegalCrossThreadCalls = false; 最近我在做一个项目,遇到了跨线程要去访问页面控件.但是总是提示出错,不能在其它线程中修改创建控件的线程的控件的值,后来采用了匿名代理,结果很轻松地解决了.解决过程如下: 首先在窗体上 ,创建一个listbox 与 lable. using System; using S
2、ystem.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Threading; namespace AccessControl public partial class Form1 : Form public Form1() InitializeComponent(); private void Form1_Load(object sende
3、r, EventArgs e) Thread newthread = new Thread(new ThreadStart(BackgroundProcess); newthread.Start(); / / 定义一个代理/ private delegate void CrossThreadOperationControl(); private void BackgroundProcess() / 将代理实例化为一个匿名代理CrossThreadOperationControl CrossDelete = delegate() 名师资料总结 - - -精品资料欢迎下载 - - - - - -
4、- - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 7 页 - - - - - - - - - int i = 1; while (i5) / 向列表框增加一个项目listBox1.Items.Add(Item + i.ToString(); i+; label1.Text = 我在新线程里访问这个lable!; listBox1.Items.Add(label1.Text); ; listBox1.Invoke(CrossDelete); 希望这个小技巧能够对你的学习和工作有所帮助.若有更好的办法来解决跨线程访问控件的问题 ,不防也拿出来
5、大家分享一下. C#跨线程访问控件运行时错误,使用MethodInvoker 即可解决:原代码:private void btnOK_Click(object sender, EventArgs e) tslInfo.Text = 请稍候 .; Thread td = new Thread(new ThreadStart(run); td.Start(); / / 线程方法/ private void run() this.tslInfo.Text = 就绪 ; 修改后:private void btnOK_Click(object sender, EventArgs e) tslInfo.T
6、ext = 请稍候 .; Thread td = new Thread(new ThreadStart(threadRun); td.Start(); / / 原线程方法/ private void run() 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 7 页 - - - - - - - - - this.tslInfo.Text = 就绪 ; / / 线程方法/ private void threadRun() MethodInvoker In = new Met
7、hodInvoker(run); this.BeginInvoke(In); 我们在做winform 应用的时候, 大部分情况下都会碰到使用多线程控制界面上控件信息的问题。然而我们并不能用传统方法来做这个问题,下面我将详细的介绍。首先来看传统方法:public partial class Form1 : Form public Form1() InitializeComponent(); private void Form1_Load(object sender, EventArgs e) Thread thread = new Thread(ThreadFuntion); thread.Is
8、Background = true; thread.Start(); private void ThreadFuntion() while (true) this.textBox1.Text = DateTime.Now.ToString(); Thread.Sleep(1000); 运行这段代码,我们会看到系统抛出一个异常:Cross-thread operation not valid:Control textBox1 accessed from a thread other than the thread it was created on . 这是因为 .net 2.0 以后加强了安全
9、机制, 不允许在winform 中直接跨线程访问控件的属性。那么怎么解决这个问题呢,下面提供几种方案。第一种方案,我们在Form1_Load() 方法中加一句代码:private void Form1_Load(object sender, EventArgs e) Control.CheckForIllegalCrossThreadCalls = false; Thread thread = new Thread(ThreadFuntion); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - -
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年多线程之跨线程操作控件 2022 多线程 线程 操作 控件
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内